Файловый менеджер - Редактировать - /var/www/html/test.zip
Ðазад
PK ! ���h� � internal/genflags/testflag.gonu �[��� // Copyright 2023 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 genflags import ( "flag" "strings" "testing" ) // ShortTestFlags returns the set of "-test." flag shorthand names that end // users may pass to 'go test'. func ShortTestFlags() []string { testing.Init() var names []string flag.VisitAll(func(f *flag.Flag) { var name string var found bool if name, found = strings.CutPrefix(f.Name, "test."); !found { return } switch name { case "testlogfile", "paniconexit0", "fuzzcachedir", "fuzzworker", "gocoverdir": // These flags are only for use by cmd/go. default: names = append(names, name) } }) return names } PK ! ��5�4 4 internal/genflags/vetflag.gonu �[��� // Copyright 2019 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 genflags import ( "bytes" "cmd/go/internal/base" "encoding/json" "fmt" "os/exec" "regexp" "sort" ) // VetAnalyzers computes analyzers and their aliases supported by vet. func VetAnalyzers() ([]string, error) { // get supported vet flag information tool := base.Tool("vet") vetcmd := exec.Command(tool, "-flags") out := new(bytes.Buffer) vetcmd.Stdout = out if err := vetcmd.Run(); err != nil { return nil, fmt.Errorf("go vet: can't execute %s -flags: %v\n", tool, err) } var analysisFlags []struct { Name string Bool bool Usage string } if err := json.Unmarshal(out.Bytes(), &analysisFlags); err != nil { return nil, fmt.Errorf("go vet: can't unmarshal JSON from %s -flags: %v", tool, err) } // parse the flags to figure out which ones stand for analyses analyzerSet := make(map[string]bool) rEnable := regexp.MustCompile("^enable .+ analysis$") for _, flag := range analysisFlags { if rEnable.MatchString(flag.Usage) { analyzerSet[flag.Name] = true } } rDeprecated := regexp.MustCompile("^deprecated alias for -(?P<analyzer>(.+))$") // Returns the original value matched by rDeprecated on input value. // If there is no match, "" is returned. originalValue := func(value string) string { match := rDeprecated.FindStringSubmatch(value) if len(match) < 2 { return "" } return match[1] } // extract deprecated aliases for existing analyses for _, flag := range analysisFlags { if o := originalValue(flag.Usage); analyzerSet[o] { analyzerSet[flag.Name] = true } } var analyzers []string for a := range analyzerSet { analyzers = append(analyzers, a) } sort.Strings(analyzers) return analyzers, nil } PK ! Ji+ H H genflags.gonu �[��� // Copyright 2019 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. //go:build ignore package main import ( "bytes" "log" "os" "os/exec" "text/template" "cmd/go/internal/test/internal/genflags" ) func main() { if err := regenerate(); err != nil { log.Fatal(err) } } func regenerate() error { vetAnalyzers, err := genflags.VetAnalyzers() if err != nil { return err } t := template.Must(template.New("fileTemplate").Parse(fileTemplate)) tData := map[string][]string{ "testFlags": genflags.ShortTestFlags(), "vetAnalyzers": vetAnalyzers, } buf := bytes.NewBuffer(nil) if err := t.Execute(buf, tData); err != nil { return err } f, err := os.Create("flagdefs.go") if err != nil { return err } cmd := exec.Command("gofmt") cmd.Stdin = buf cmd.Stdout = f cmd.Stderr = os.Stderr cmdErr := cmd.Run() if err := f.Close(); err != nil { return err } if cmdErr != nil { os.Remove(f.Name()) return cmdErr } return nil } const fileTemplate = `// Copyright 2019 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. // Code generated by genflags.go — DO NOT EDIT. package test // passFlagToTest contains the flags that should be forwarded to // the test binary with the prefix "test.". var passFlagToTest = map[string]bool { {{- range .testFlags}} "{{.}}": true, {{- end }} } var passAnalyzersToVet = map[string]bool { {{- range .vetAnalyzers}} "{{.}}": true, {{- end }} } ` PK ! E+��0 �0 testflag.gonu �[��� // Copyright 2011 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 test import ( "cmd/go/internal/base" "cmd/go/internal/cmdflag" "cmd/go/internal/work" "errors" "flag" "fmt" "os" "path/filepath" "strconv" "strings" "time" ) //go:generate go run ./genflags.go // The flag handling part of go test is large and distracting. // We can't use (*flag.FlagSet).Parse because some of the flags from // our command line are for us, and some are for the test binary, and // some are for both. func init() { work.AddBuildFlags(CmdTest, work.OmitVFlag) cf := CmdTest.Flag cf.BoolVar(&testC, "c", false, "") cf.StringVar(&testO, "o", "", "") work.AddCoverFlags(CmdTest, &testCoverProfile) cf.Var((*base.StringsFlag)(&work.ExecCmd), "exec", "") cf.BoolVar(&testJSON, "json", false, "") cf.Var(&testVet, "vet", "") // Register flags to be forwarded to the test binary. We retain variables for // some of them so that cmd/go knows what to do with the test output, or knows // to build the test in a way that supports the use of the flag. cf.StringVar(&testBench, "bench", "", "") cf.Bool("benchmem", false, "") cf.String("benchtime", "", "") cf.StringVar(&testBlockProfile, "blockprofile", "", "") cf.String("blockprofilerate", "", "") cf.Int("count", 0, "") cf.String("cpu", "", "") cf.StringVar(&testCPUProfile, "cpuprofile", "", "") cf.Bool("failfast", false, "") cf.StringVar(&testFuzz, "fuzz", "", "") cf.Bool("fullpath", false, "") cf.StringVar(&testList, "list", "", "") cf.StringVar(&testMemProfile, "memprofile", "", "") cf.String("memprofilerate", "", "") cf.StringVar(&testMutexProfile, "mutexprofile", "", "") cf.String("mutexprofilefraction", "", "") cf.Var(&testOutputDir, "outputdir", "") cf.Int("parallel", 0, "") cf.String("run", "", "") cf.Bool("short", false, "") cf.String("skip", "", "") cf.DurationVar(&testTimeout, "timeout", 10*time.Minute, "") // known to cmd/dist cf.String("fuzztime", "", "") cf.String("fuzzminimizetime", "", "") cf.StringVar(&testTrace, "trace", "", "") cf.Var(&testV, "v", "") cf.Var(&testShuffle, "shuffle", "") for name, ok := range passFlagToTest { if ok { cf.Var(cf.Lookup(name).Value, "test."+name, "") } } } // outputdirFlag implements the -outputdir flag. // It interprets an empty value as the working directory of the 'go' command. type outputdirFlag struct { abs string } func (f *outputdirFlag) String() string { return f.abs } func (f *outputdirFlag) Set(value string) (err error) { if value == "" { f.abs = "" } else { f.abs, err = filepath.Abs(value) } return err } func (f *outputdirFlag) getAbs() string { if f.abs == "" { return base.Cwd() } return f.abs } // vetFlag implements the special parsing logic for the -vet flag: // a comma-separated list, with distinguished values "all" and // "off", plus a boolean tracking whether it was set explicitly. // // "all" is encoded as vetFlag{true, false, nil}, since it will // pass no flags to the vet binary, and by default, it runs all // analyzers. type vetFlag struct { explicit bool off bool flags []string // passed to vet when invoked automatically during 'go test' } func (f *vetFlag) String() string { switch { case !f.off && !f.explicit && len(f.flags) == 0: return "all" case f.off: return "off" } var buf strings.Builder for i, f := range f.flags { if i > 0 { buf.WriteByte(',') } buf.WriteString(f) } return buf.String() } func (f *vetFlag) Set(value string) error { switch { case value == "": *f = vetFlag{flags: defaultVetFlags} return nil case strings.Contains(value, "="): return fmt.Errorf("-vet argument cannot contain equal signs") case strings.Contains(value, " "): return fmt.Errorf("-vet argument is comma-separated list, cannot contain spaces") } *f = vetFlag{explicit: true} var single string for _, arg := range strings.Split(value, ",") { switch arg { case "": return fmt.Errorf("-vet argument contains empty list element") case "all": single = arg *f = vetFlag{explicit: true} continue case "off": single = arg *f = vetFlag{ explicit: true, off: true, } continue default: if _, ok := passAnalyzersToVet[arg]; !ok { return fmt.Errorf("-vet argument must be a supported analyzer or a distinguished value; found %s", arg) } f.flags = append(f.flags, "-"+arg) } } if len(f.flags) > 1 && single != "" { return fmt.Errorf("-vet does not accept %q in a list with other analyzers", single) } if len(f.flags) > 1 && single != "" { return fmt.Errorf("-vet does not accept %q in a list with other analyzers", single) } return nil } type shuffleFlag struct { on bool seed *int64 } func (f *shuffleFlag) String() string { if !f.on { return "off" } if f.seed == nil { return "on" } return fmt.Sprintf("%d", *f.seed) } func (f *shuffleFlag) Set(value string) error { if value == "off" { *f = shuffleFlag{on: false} return nil } if value == "on" { *f = shuffleFlag{on: true} return nil } seed, err := strconv.ParseInt(value, 10, 64) if err != nil { return fmt.Errorf(`-shuffle argument must be "on", "off", or an int64: %v`, err) } *f = shuffleFlag{on: true, seed: &seed} return nil } // testFlags processes the command line, grabbing -x and -c, rewriting known flags // to have "test" before them, and reading the command line for the test binary. // Unfortunately for us, we need to do our own flag processing because go test // grabs some flags but otherwise its command line is just a holding place for // pkg.test's arguments. // We allow known flags both before and after the package name list, // to allow both // // go test fmt -custom-flag-for-fmt-test // go test -x math func testFlags(args []string) (packageNames, passToTest []string) { base.SetFromGOFLAGS(&CmdTest.Flag) addFromGOFLAGS := map[string]bool{} CmdTest.Flag.Visit(func(f *flag.Flag) { if short := strings.TrimPrefix(f.Name, "test."); passFlagToTest[short] { addFromGOFLAGS[f.Name] = true } }) // firstUnknownFlag helps us report an error when flags not known to 'go // test' are used along with -i or -c. firstUnknownFlag := "" explicitArgs := make([]string, 0, len(args)) inPkgList := false afterFlagWithoutValue := false for len(args) > 0 { f, remainingArgs, err := cmdflag.ParseOne(&CmdTest.Flag, args) wasAfterFlagWithoutValue := afterFlagWithoutValue afterFlagWithoutValue = false // provisionally if errors.Is(err, flag.ErrHelp) { exitWithUsage() } if errors.Is(err, cmdflag.ErrFlagTerminator) { // 'go list' allows package arguments to be named either before or after // the terminator, but 'go test' has historically allowed them only // before. Preserve that behavior and treat all remaining arguments — // including the terminator itself! — as arguments to the test. explicitArgs = append(explicitArgs, args...) break } if nf := (cmdflag.NonFlagError{}); errors.As(err, &nf) { if !inPkgList && packageNames != nil { // We already saw the package list previously, and this argument is not // a flag, so it — and everything after it — must be either a value for // a preceding flag or a literal argument to the test binary. if wasAfterFlagWithoutValue { // This argument could syntactically be a flag value, so // optimistically assume that it is and keep looking for go command // flags after it. // // (If we're wrong, we'll at least be consistent with historical // behavior; see https://golang.org/issue/40763.) explicitArgs = append(explicitArgs, nf.RawArg) args = remainingArgs continue } else { // This argument syntactically cannot be a flag value, so it must be a // positional argument, and so must everything after it. explicitArgs = append(explicitArgs, args...) break } } inPkgList = true packageNames = append(packageNames, nf.RawArg) args = remainingArgs // Consume the package name. continue } if inPkgList { // This argument is syntactically a flag, so if we were in the package // list we're not anymore. inPkgList = false } if nd := (cmdflag.FlagNotDefinedError{}); errors.As(err, &nd) { // This is a flag we do not know. We must assume that any args we see // after this might be flag arguments, not package names, so make // packageNames non-nil to indicate that the package list is complete. // // (Actually, we only strictly need to assume that if the flag is not of // the form -x=value, but making this more precise would be a breaking // change in the command line API.) if packageNames == nil { packageNames = []string{} } if nd.RawArg == "-args" || nd.RawArg == "--args" { // -args or --args signals that everything that follows // should be passed to the test. explicitArgs = append(explicitArgs, remainingArgs...) break } if firstUnknownFlag == "" { firstUnknownFlag = nd.RawArg } explicitArgs = append(explicitArgs, nd.RawArg) args = remainingArgs if !nd.HasValue { afterFlagWithoutValue = true } continue } if err != nil { fmt.Fprintln(os.Stderr, err) exitWithUsage() } if short := strings.TrimPrefix(f.Name, "test."); passFlagToTest[short] { explicitArgs = append(explicitArgs, fmt.Sprintf("-test.%s=%v", short, f.Value)) // This flag has been overridden explicitly, so don't forward its implicit // value from GOFLAGS. delete(addFromGOFLAGS, short) delete(addFromGOFLAGS, "test."+short) } args = remainingArgs } if firstUnknownFlag != "" && testC { fmt.Fprintf(os.Stderr, "go: unknown flag %s cannot be used with -c\n", firstUnknownFlag) exitWithUsage() } var injectedFlags []string if testJSON { // If converting to JSON, we need the full output in order to pipe it to test2json. // The -test.v=test2json flag is like -test.v=true but causes the test to add // extra ^V characters before testing output lines and other framing, // which helps test2json do a better job creating the JSON events. injectedFlags = append(injectedFlags, "-test.v=test2json") delete(addFromGOFLAGS, "v") delete(addFromGOFLAGS, "test.v") } // Inject flags from GOFLAGS before the explicit command-line arguments. // (They must appear before the flag terminator or first non-flag argument.) // Also determine whether flags with awkward defaults have already been set. var timeoutSet, outputDirSet bool CmdTest.Flag.Visit(func(f *flag.Flag) { short := strings.TrimPrefix(f.Name, "test.") if addFromGOFLAGS[f.Name] { injectedFlags = append(injectedFlags, fmt.Sprintf("-test.%s=%v", short, f.Value)) } switch short { case "timeout": timeoutSet = true case "outputdir": outputDirSet = true } }) // 'go test' has a default timeout, but the test binary itself does not. // If the timeout wasn't set (and forwarded) explicitly, add the default // timeout to the command line. if testTimeout > 0 && !timeoutSet { injectedFlags = append(injectedFlags, fmt.Sprintf("-test.timeout=%v", testTimeout)) } // Similarly, the test binary defaults -test.outputdir to its own working // directory, but 'go test' defaults it to the working directory of the 'go' // command. Set it explicitly if it is needed due to some other flag that // requests output. if testProfile() != "" && !outputDirSet { injectedFlags = append(injectedFlags, "-test.outputdir="+testOutputDir.getAbs()) } // If the user is explicitly passing -help or -h, show output // of the test binary so that the help output is displayed // even though the test will exit with success. // This loop is imperfect: it will do the wrong thing for a case // like -args -test.outputdir -help. Such cases are probably rare, // and getting this wrong doesn't do too much harm. helpLoop: for _, arg := range explicitArgs { switch arg { case "--": break helpLoop case "-h", "-help", "--help": testHelp = true break helpLoop } } // Forward any unparsed arguments (following --args) to the test binary. return packageNames, append(injectedFlags, explicitArgs...) } func exitWithUsage() { fmt.Fprintf(os.Stderr, "usage: %s\n", CmdTest.UsageLine) fmt.Fprintf(os.Stderr, "Run 'go help %s' and 'go help %s' for details.\n", CmdTest.LongName(), HelpTestflag.LongName()) base.SetExitStatus(2) base.Exit() } PK ! �0�+ + test_unix.gonu �[��� // Copyright 2023 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. //go:build unix package test import ( "errors" "syscall" ) func isETXTBSY(err error) bool { return errors.Is(err, syscall.ETXTBSY) } PK ! ���% % cover.gonu �[��� // Copyright 2017 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 test import ( "cmd/go/internal/base" "cmd/go/internal/cfg" "fmt" "io" "os" "path/filepath" "sync" ) var coverMerge struct { f *os.File sync.Mutex // for f.Write } // initCoverProfile initializes the test coverage profile. // It must be run before any calls to mergeCoverProfile or closeCoverProfile. // Using this function clears the profile in case it existed from a previous run, // or in case it doesn't exist and the test is going to fail to create it (or not run). func initCoverProfile() { if testCoverProfile == "" || testC { return } if !filepath.IsAbs(testCoverProfile) { testCoverProfile = filepath.Join(testOutputDir.getAbs(), testCoverProfile) } // No mutex - caller's responsibility to call with no racing goroutines. f, err := os.Create(testCoverProfile) if err != nil { base.Fatalf("%v", err) } _, err = fmt.Fprintf(f, "mode: %s\n", cfg.BuildCoverMode) if err != nil { base.Fatalf("%v", err) } coverMerge.f = f } // mergeCoverProfile merges file into the profile stored in testCoverProfile. // It prints any errors it encounters to ew. func mergeCoverProfile(ew io.Writer, file string) { if coverMerge.f == nil { return } coverMerge.Lock() defer coverMerge.Unlock() expect := fmt.Sprintf("mode: %s\n", cfg.BuildCoverMode) buf := make([]byte, len(expect)) r, err := os.Open(file) if err != nil { // Test did not create profile, which is OK. return } defer r.Close() n, err := io.ReadFull(r, buf) if n == 0 { return } if err != nil || string(buf) != expect { fmt.Fprintf(ew, "error: test wrote malformed coverage profile %s.\n", file) return } _, err = io.Copy(coverMerge.f, r) if err != nil { fmt.Fprintf(ew, "error: saving coverage profile: %v\n", err) } } func closeCoverProfile() { if coverMerge.f == nil { return } if err := coverMerge.f.Close(); err != nil { base.Errorf("closing coverage profile: %v", err) } } PK ! �/z� � flagdefs.gonu �[��� // Copyright 2019 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. // Code generated by genflags.go — DO NOT EDIT. package test // passFlagToTest contains the flags that should be forwarded to // the test binary with the prefix "test.". var passFlagToTest = map[string]bool{ "bench": true, "benchmem": true, "benchtime": true, "blockprofile": true, "blockprofilerate": true, "count": true, "coverprofile": true, "cpu": true, "cpuprofile": true, "failfast": true, "fullpath": true, "fuzz": true, "fuzzminimizetime": true, "fuzztime": true, "list": true, "memprofile": true, "memprofilerate": true, "mutexprofile": true, "mutexprofilefraction": true, "outputdir": true, "parallel": true, "run": true, "short": true, "shuffle": true, "skip": true, "timeout": true, "trace": true, "v": true, } var passAnalyzersToVet = map[string]bool{ "appends": true, "asmdecl": true, "assign": true, "atomic": true, "bool": true, "bools": true, "buildtag": true, "buildtags": true, "cgocall": true, "composites": true, "copylocks": true, "defers": true, "directive": true, "errorsas": true, "framepointer": true, "httpresponse": true, "ifaceassert": true, "loopclosure": true, "lostcancel": true, "methods": true, "nilfunc": true, "printf": true, "rangeloops": true, "shift": true, "sigchanyzer": true, "slog": true, "stdmethods": true, "stringintconv": true, "structtag": true, "testinggoroutine": true, "tests": true, "timeformat": true, "unmarshal": true, "unreachable": true, "unsafeptr": true, "unusedresult": true, } PK ! ��+ + test_nonunix.gonu �[��� // Copyright 2023 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. //go:build !unix package test func isETXTBSY(err error) bool { // syscall.ETXTBSY is only meaningful on Unix platforms. return false } PK ! w�� test.gonu �[��� // Copyright 2011 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 test import ( "bytes" "context" "errors" "fmt" "internal/coverage" "internal/platform" "io" "io/fs" "os" "os/exec" "path/filepath" "regexp" "slices" "strconv" "strings" "sync" "time" "cmd/go/internal/base" "cmd/go/internal/cache" "cmd/go/internal/cfg" "cmd/go/internal/load" "cmd/go/internal/lockedfile" "cmd/go/internal/modload" "cmd/go/internal/search" "cmd/go/internal/str" "cmd/go/internal/trace" "cmd/go/internal/work" "cmd/internal/test2json" "golang.org/x/mod/module" ) // Break init loop. func init() { CmdTest.Run = runTest } const testUsage = "go test [build/test flags] [packages] [build/test flags & test binary flags]" var CmdTest = &base.Command{ CustomFlags: true, UsageLine: testUsage, Short: "test packages", Long: ` 'Go test' automates testing the packages named by the import paths. It prints a summary of the test results in the format: ok archive/tar 0.011s FAIL archive/zip 0.022s ok compress/gzip 0.033s ... followed by detailed output for each failed package. 'Go test' recompiles each package along with any files with names matching the file pattern "*_test.go". These additional files can contain test functions, benchmark functions, fuzz tests and example functions. See 'go help testfunc' for more. Each listed package causes the execution of a separate test binary. Files whose names begin with "_" (including "_test.go") or "." are ignored. Test files that declare a package with the suffix "_test" will be compiled as a separate package, and then linked and run with the main test binary. The go tool will ignore a directory named "testdata", making it available to hold ancillary data needed by the tests. As part of building a test binary, go test runs go vet on the package and its test source files to identify significant problems. If go vet finds any problems, go test reports those and does not run the test binary. Only a high-confidence subset of the default go vet checks are used. That subset is: atomic, bool, buildtags, directive, errorsas, ifaceassert, nilfunc, printf, and stringintconv. You can see the documentation for these and other vet tests via "go doc cmd/vet". To disable the running of go vet, use the -vet=off flag. To run all checks, use the -vet=all flag. All test output and summary lines are printed to the go command's standard output, even if the test printed them to its own standard error. (The go command's standard error is reserved for printing errors building the tests.) The go command places $GOROOT/bin at the beginning of $PATH in the test's environment, so that tests that execute 'go' commands use the same 'go' as the parent 'go test' command. Go test runs in two different modes: The first, called local directory mode, occurs when go test is invoked with no package arguments (for example, 'go test' or 'go test -v'). In this mode, go test compiles the package sources and tests found in the current directory and then runs the resulting test binary. In this mode, caching (discussed below) is disabled. After the package test finishes, go test prints a summary line showing the test status ('ok' or 'FAIL'), package name, and elapsed time. The second, called package list mode, occurs when go test is invoked with explicit package arguments (for example 'go test math', 'go test ./...', and even 'go test .'). In this mode, go test compiles and tests each of the packages listed on the command line. If a package test passes, go test prints only the final 'ok' summary line. If a package test fails, go test prints the full test output. If invoked with the -bench or -v flag, go test prints the full output even for passing package tests, in order to display the requested benchmark results or verbose logging. After the package tests for all of the listed packages finish, and their output is printed, go test prints a final 'FAIL' status if any package test has failed. In package list mode only, go test caches successful package test results to avoid unnecessary repeated running of tests. When the result of a test can be recovered from the cache, go test will redisplay the previous output instead of running the test binary again. When this happens, go test prints '(cached)' in place of the elapsed time in the summary line. The rule for a match in the cache is that the run involves the same test binary and the flags on the command line come entirely from a restricted set of 'cacheable' test flags, defined as -benchtime, -cpu, -list, -parallel, -run, -short, -timeout, -failfast, and -v. If a run of go test has any test or non-test flags outside this set, the result is not cached. To disable test caching, use any test flag or argument other than the cacheable flags. The idiomatic way to disable test caching explicitly is to use -count=1. Tests that open files within the package's source root (usually $GOPATH) or that consult environment variables only match future runs in which the files and environment variables are unchanged. A cached test result is treated as executing in no time at all, so a successful package test result will be cached and reused regardless of -timeout setting. In addition to the build flags, the flags handled by 'go test' itself are: -args Pass the remainder of the command line (everything after -args) to the test binary, uninterpreted and unchanged. Because this flag consumes the remainder of the command line, the package list (if present) must appear before this flag. -c Compile the test binary to pkg.test in the current directory but do not run it (where pkg is the last element of the package's import path). The file name or target directory can be changed with the -o flag. -exec xprog Run the test binary using xprog. The behavior is the same as in 'go run'. See 'go help run' for details. -json Convert test output to JSON suitable for automated processing. See 'go doc test2json' for the encoding details. -o file Compile the test binary to the named file. The test still runs (unless -c or -i is specified). If file ends in a slash or names an existing directory, the test is written to pkg.test in that directory. The test binary also accepts flags that control execution of the test; these flags are also accessible by 'go test'. See 'go help testflag' for details. For more about build flags, see 'go help build'. For more about specifying packages, see 'go help packages'. See also: go build, go vet. `, } var HelpTestflag = &base.Command{ UsageLine: "testflag", Short: "testing flags", Long: ` The 'go test' command takes both flags that apply to 'go test' itself and flags that apply to the resulting test binary. Several of the flags control profiling and write an execution profile suitable for "go tool pprof"; run "go tool pprof -h" for more information. The --alloc_space, --alloc_objects, and --show_bytes options of pprof control how the information is presented. The following flags are recognized by the 'go test' command and control the execution of any test: -bench regexp Run only those benchmarks matching a regular expression. By default, no benchmarks are run. To run all benchmarks, use '-bench .' or '-bench=.'. The regular expression is split by unbracketed slash (/) characters into a sequence of regular expressions, and each part of a benchmark's identifier must match the corresponding element in the sequence, if any. Possible parents of matches are run with b.N=1 to identify sub-benchmarks. For example, given -bench=X/Y, top-level benchmarks matching X are run with b.N=1 to find any sub-benchmarks matching Y, which are then run in full. -benchtime t Run enough iterations of each benchmark to take t, specified as a time.Duration (for example, -benchtime 1h30s). The default is 1 second (1s). The special syntax Nx means to run the benchmark N times (for example, -benchtime 100x). -count n Run each test, benchmark, and fuzz seed n times (default 1). If -cpu is set, run n times for each GOMAXPROCS value. Examples are always run once. -count does not apply to fuzz tests matched by -fuzz. -cover Enable coverage analysis. Note that because coverage works by annotating the source code before compilation, compilation and test failures with coverage enabled may report line numbers that don't correspond to the original sources. -covermode set,count,atomic Set the mode for coverage analysis for the package[s] being tested. The default is "set" unless -race is enabled, in which case it is "atomic". The values: set: bool: does this statement run? count: int: how many times does this statement run? atomic: int: count, but correct in multithreaded tests; significantly more expensive. Sets -cover. -coverpkg pattern1,pattern2,pattern3 Apply coverage analysis in each test to packages matching the patterns. The default is for each test to analyze only the package being tested. See 'go help packages' for a description of package patterns. Sets -cover. -cpu 1,2,4 Specify a list of GOMAXPROCS values for which the tests, benchmarks or fuzz tests should be executed. The default is the current value of GOMAXPROCS. -cpu does not apply to fuzz tests matched by -fuzz. -failfast Do not start new tests after the first test failure. -fullpath Show full file names in the error messages. -fuzz regexp Run the fuzz test matching the regular expression. When specified, the command line argument must match exactly one package within the main module, and regexp must match exactly one fuzz test within that package. Fuzzing will occur after tests, benchmarks, seed corpora of other fuzz tests, and examples have completed. See the Fuzzing section of the testing package documentation for details. -fuzztime t Run enough iterations of the fuzz target during fuzzing to take t, specified as a time.Duration (for example, -fuzztime 1h30s). The default is to run forever. The special syntax Nx means to run the fuzz target N times (for example, -fuzztime 1000x). -fuzzminimizetime t Run enough iterations of the fuzz target during each minimization attempt to take t, as specified as a time.Duration (for example, -fuzzminimizetime 30s). The default is 60s. The special syntax Nx means to run the fuzz target N times (for example, -fuzzminimizetime 100x). -json Log verbose output and test results in JSON. This presents the same information as the -v flag in a machine-readable format. -list regexp List tests, benchmarks, fuzz tests, or examples matching the regular expression. No tests, benchmarks, fuzz tests, or examples will be run. This will only list top-level tests. No subtest or subbenchmarks will be shown. -parallel n Allow parallel execution of test functions that call t.Parallel, and fuzz targets that call t.Parallel when running the seed corpus. The value of this flag is the maximum number of tests to run simultaneously. While fuzzing, the value of this flag is the maximum number of subprocesses that may call the fuzz function simultaneously, regardless of whether T.Parallel is called. By default, -parallel is set to the value of GOMAXPROCS. Setting -parallel to values higher than GOMAXPROCS may cause degraded performance due to CPU contention, especially when fuzzing. Note that -parallel only applies within a single test binary. The 'go test' command may run tests for different packages in parallel as well, according to the setting of the -p flag (see 'go help build'). -run regexp Run only those tests, examples, and fuzz tests matching the regular expression. For tests, the regular expression is split by unbracketed slash (/) characters into a sequence of regular expressions, and each part of a test's identifier must match the corresponding element in the sequence, if any. Note that possible parents of matches are run too, so that -run=X/Y matches and runs and reports the result of all tests matching X, even those without sub-tests matching Y, because it must run them to look for those sub-tests. See also -skip. -short Tell long-running tests to shorten their run time. It is off by default but set during all.bash so that installing the Go tree can run a sanity check but not spend time running exhaustive tests. -shuffle off,on,N Randomize the execution order of tests and benchmarks. It is off by default. If -shuffle is set to on, then it will seed the randomizer using the system clock. If -shuffle is set to an integer N, then N will be used as the seed value. In both cases, the seed will be reported for reproducibility. -skip regexp Run only those tests, examples, fuzz tests, and benchmarks that do not match the regular expression. Like for -run and -bench, for tests and benchmarks, the regular expression is split by unbracketed slash (/) characters into a sequence of regular expressions, and each part of a test's identifier must match the corresponding element in the sequence, if any. -timeout d If a test binary runs longer than duration d, panic. If d is 0, the timeout is disabled. The default is 10 minutes (10m). -v Verbose output: log all tests as they are run. Also print all text from Log and Logf calls even if the test succeeds. -vet list Configure the invocation of "go vet" during "go test" to use the comma-separated list of vet checks. If list is empty, "go test" runs "go vet" with a curated list of checks believed to be always worth addressing. If list is "off", "go test" does not run "go vet" at all. The following flags are also recognized by 'go test' and can be used to profile the tests during execution: -benchmem Print memory allocation statistics for benchmarks. -blockprofile block.out Write a goroutine blocking profile to the specified file when all tests are complete. Writes test binary as -c would. -blockprofilerate n Control the detail provided in goroutine blocking profiles by calling runtime.SetBlockProfileRate with n. See 'go doc runtime.SetBlockProfileRate'. The profiler aims to sample, on average, one blocking event every n nanoseconds the program spends blocked. By default, if -test.blockprofile is set without this flag, all blocking events are recorded, equivalent to -test.blockprofilerate=1. -coverprofile cover.out Write a coverage profile to the file after all tests have passed. Sets -cover. -cpuprofile cpu.out Write a CPU profile to the specified file before exiting. Writes test binary as -c would. -memprofile mem.out Write an allocation profile to the file after all tests have passed. Writes test binary as -c would. -memprofilerate n Enable more precise (and expensive) memory allocation profiles by setting runtime.MemProfileRate. See 'go doc runtime.MemProfileRate'. To profile all memory allocations, use -test.memprofilerate=1. -mutexprofile mutex.out Write a mutex contention profile to the specified file when all tests are complete. Writes test binary as -c would. -mutexprofilefraction n Sample 1 in n stack traces of goroutines holding a contended mutex. -outputdir directory Place output files from profiling in the specified directory, by default the directory in which "go test" is running. -trace trace.out Write an execution trace to the specified file before exiting. Each of these flags is also recognized with an optional 'test.' prefix, as in -test.v. When invoking the generated test binary (the result of 'go test -c') directly, however, the prefix is mandatory. The 'go test' command rewrites or removes recognized flags, as appropriate, both before and after the optional package list, before invoking the test binary. For instance, the command go test -v -myflag testdata -cpuprofile=prof.out -x will compile the test binary and then run it as pkg.test -test.v -myflag testdata -test.cpuprofile=prof.out (The -x flag is removed because it applies only to the go command's execution, not to the test itself.) The test flags that generate profiles (other than for coverage) also leave the test binary in pkg.test for use when analyzing the profiles. When 'go test' runs a test binary, it does so from within the corresponding package's source code directory. Depending on the test, it may be necessary to do the same when invoking a generated test binary directly. Because that directory may be located within the module cache, which may be read-only and is verified by checksums, the test must not write to it or any other directory within the module unless explicitly requested by the user (such as with the -fuzz flag, which writes failures to testdata/fuzz). The command-line package list, if present, must appear before any flag not known to the go test command. Continuing the example above, the package list would have to appear before -myflag, but could appear on either side of -v. When 'go test' runs in package list mode, 'go test' caches successful package test results to avoid unnecessary repeated running of tests. To disable test caching, use any test flag or argument other than the cacheable flags. The idiomatic way to disable test caching explicitly is to use -count=1. To keep an argument for a test binary from being interpreted as a known flag or a package name, use -args (see 'go help test') which passes the remainder of the command line through to the test binary uninterpreted and unaltered. For instance, the command go test -v -args -x -v will compile the test binary and then run it as pkg.test -test.v -x -v Similarly, go test -args math will compile the test binary and then run it as pkg.test math In the first example, the -x and the second -v are passed through to the test binary unchanged and with no effect on the go command itself. In the second example, the argument math is passed through to the test binary, instead of being interpreted as the package list. `, } var HelpTestfunc = &base.Command{ UsageLine: "testfunc", Short: "testing functions", Long: ` The 'go test' command expects to find test, benchmark, and example functions in the "*_test.go" files corresponding to the package under test. A test function is one named TestXxx (where Xxx does not start with a lower case letter) and should have the signature, func TestXxx(t *testing.T) { ... } A benchmark function is one named BenchmarkXxx and should have the signature, func BenchmarkXxx(b *testing.B) { ... } A fuzz test is one named FuzzXxx and should have the signature, func FuzzXxx(f *testing.F) { ... } An example function is similar to a test function but, instead of using *testing.T to report success or failure, prints output to os.Stdout. If the last comment in the function starts with "Output:" then the output is compared exactly against the comment (see examples below). If the last comment begins with "Unordered output:" then the output is compared to the comment, however the order of the lines is ignored. An example with no such comment is compiled but not executed. An example with no text after "Output:" is compiled, executed, and expected to produce no output. Godoc displays the body of ExampleXxx to demonstrate the use of the function, constant, or variable Xxx. An example of a method M with receiver type T or *T is named ExampleT_M. There may be multiple examples for a given function, constant, or variable, distinguished by a trailing _xxx, where xxx is a suffix not beginning with an upper case letter. Here is an example of an example: func ExamplePrintln() { Println("The output of\nthis example.") // Output: The output of // this example. } Here is another example where the ordering of the output is ignored: func ExamplePerm() { for _, value := range Perm(4) { fmt.Println(value) } // Unordered output: 4 // 2 // 1 // 3 // 0 } The entire test file is presented as the example when it contains a single example function, at least one other function, type, variable, or constant declaration, and no tests, benchmarks, or fuzz tests. See the documentation of the testing package for more information. `, } var ( testBench string // -bench flag testC bool // -c flag testCoverPkgs []*load.Package // -coverpkg flag testCoverProfile string // -coverprofile flag testFuzz string // -fuzz flag testJSON bool // -json flag testList string // -list flag testO string // -o flag testOutputDir outputdirFlag // -outputdir flag testShuffle shuffleFlag // -shuffle flag testTimeout time.Duration // -timeout flag testV testVFlag // -v flag testVet = vetFlag{flags: defaultVetFlags} // -vet flag ) type testVFlag struct { on bool // -v is set in some form json bool // -v=test2json is set, to make output better for test2json } func (*testVFlag) IsBoolFlag() bool { return true } func (f *testVFlag) Set(arg string) error { if v, err := strconv.ParseBool(arg); err == nil { f.on = v f.json = false return nil } if arg == "test2json" { f.on = true f.json = arg == "test2json" return nil } return fmt.Errorf("invalid flag -test.v=%s", arg) } func (f *testVFlag) String() string { if f.json { return "test2json" } if f.on { return "true" } return "false" } var ( testArgs []string pkgArgs []string pkgs []*load.Package testHelp bool // -help option passed to test via -args testKillTimeout = 100 * 365 * 24 * time.Hour // backup alarm; defaults to about a century if no timeout is set testWaitDelay time.Duration // how long to wait for output to close after a test binary exits; zero means unlimited testCacheExpire time.Time // ignore cached test results before this time testBlockProfile, testCPUProfile, testMemProfile, testMutexProfile, testTrace string // profiling flag that limits test to one package testODir = false ) // testProfile returns the name of an arbitrary single-package profiling flag // that is set, if any. func testProfile() string { switch { case testBlockProfile != "": return "-blockprofile" case testCPUProfile != "": return "-cpuprofile" case testMemProfile != "": return "-memprofile" case testMutexProfile != "": return "-mutexprofile" case testTrace != "": return "-trace" default: return "" } } // testNeedBinary reports whether the test needs to keep the binary around. func testNeedBinary() bool { switch { case testBlockProfile != "": return true case testCPUProfile != "": return true case testMemProfile != "": return true case testMutexProfile != "": return true case testO != "": return true default: return false } } // testShowPass reports whether the output for a passing test should be shown. func testShowPass() bool { return testV.on || testList != "" || testHelp } var defaultVetFlags = []string{ // TODO(rsc): Decide which tests are enabled by default. // See golang.org/issue/18085. // "-asmdecl", // "-assign", "-atomic", "-bool", "-buildtags", // "-cgocall", // "-composites", // "-copylocks", "-directive", "-errorsas", // "-httpresponse", "-ifaceassert", // "-lostcancel", // "-methods", "-nilfunc", "-printf", // "-rangeloops", // "-shift", "-slog", "-stringintconv", // "-structtags", // "-tests", // "-unreachable", // "-unsafeptr", // "-unusedresult", } func runTest(ctx context.Context, cmd *base.Command, args []string) { pkgArgs, testArgs = testFlags(args) modload.InitWorkfile() // The test command does custom flag processing; initialize workspaces after that. if cfg.DebugTrace != "" { var close func() error var err error ctx, close, err = trace.Start(ctx, cfg.DebugTrace) if err != nil { base.Fatalf("failed to start trace: %v", err) } defer func() { if err := close(); err != nil { base.Fatalf("failed to stop trace: %v", err) } }() } ctx, span := trace.StartSpan(ctx, fmt.Sprint("Running ", cmd.Name(), " command")) defer span.Done() work.FindExecCmd() // initialize cached result work.BuildInit() work.VetFlags = testVet.flags work.VetExplicit = testVet.explicit pkgOpts := load.PackageOpts{ModResolveTests: true} pkgs = load.PackagesAndErrors(ctx, pkgOpts, pkgArgs) load.CheckPackageErrors(pkgs) if len(pkgs) == 0 { base.Fatalf("no packages to test") } if testFuzz != "" { if !platform.FuzzSupported(cfg.Goos, cfg.Goarch) { base.Fatalf("-fuzz flag is not supported on %s/%s", cfg.Goos, cfg.Goarch) } if len(pkgs) != 1 { base.Fatalf("cannot use -fuzz flag with multiple packages") } if testCoverProfile != "" { base.Fatalf("cannot use -coverprofile flag with -fuzz flag") } if profileFlag := testProfile(); profileFlag != "" { base.Fatalf("cannot use %s flag with -fuzz flag", profileFlag) } // Reject the '-fuzz' flag if the package is outside the main module. // Otherwise, if fuzzing identifies a failure it could corrupt checksums in // the module cache (or permanently alter the behavior of std tests for all // users) by writing the failing input to the package's testdata directory. // (See https://golang.org/issue/48495 and test_fuzz_modcache.txt.) mainMods := modload.MainModules if m := pkgs[0].Module; m != nil && m.Path != "" { if !mainMods.Contains(m.Path) { base.Fatalf("cannot use -fuzz flag on package outside the main module") } } else if pkgs[0].Standard && modload.Enabled() { // Because packages in 'std' and 'cmd' are part of the standard library, // they are only treated as part of a module in 'go mod' subcommands and // 'go get'. However, we still don't want to accidentally corrupt their // testdata during fuzzing, nor do we want to fail with surprising errors // if GOROOT isn't writable (as is often the case for Go toolchains // installed through package managers). // // If the user is requesting to fuzz a standard-library package, ensure // that they are in the same module as that package (just like when // fuzzing any other package). if strings.HasPrefix(pkgs[0].ImportPath, "cmd/") { if !mainMods.Contains("cmd") || !mainMods.InGorootSrc(module.Version{Path: "cmd"}) { base.Fatalf("cannot use -fuzz flag on package outside the main module") } } else { if !mainMods.Contains("std") || !mainMods.InGorootSrc(module.Version{Path: "std"}) { base.Fatalf("cannot use -fuzz flag on package outside the main module") } } } } if testProfile() != "" && len(pkgs) != 1 { base.Fatalf("cannot use %s flag with multiple packages", testProfile()) } if testO != "" { if strings.HasSuffix(testO, "/") || strings.HasSuffix(testO, string(os.PathSeparator)) { testODir = true } else if fi, err := os.Stat(testO); err == nil && fi.IsDir() { testODir = true } } if len(pkgs) > 1 && (testC || testO != "") && !base.IsNull(testO) { if testO != "" && !testODir { base.Fatalf("with multiple packages, -o must refer to a directory or %s", os.DevNull) } pkgsForBinary := map[string][]*load.Package{} for _, p := range pkgs { testBinary := testBinaryName(p) pkgsForBinary[testBinary] = append(pkgsForBinary[testBinary], p) } for testBinary, pkgs := range pkgsForBinary { if len(pkgs) > 1 { var buf strings.Builder for _, pkg := range pkgs { buf.WriteString(pkg.ImportPath) buf.WriteString("\n") } base.Errorf("cannot write test binary %s for multiple packages:\n%s", testBinary, buf.String()) } } base.ExitIfErrors() } initCoverProfile() defer closeCoverProfile() // If a test timeout is finite, set our kill timeout // to that timeout plus one minute. This is a backup alarm in case // the test wedges with a goroutine spinning and its background // timer does not get a chance to fire. // Don't set this if fuzzing, since it should be able to run // indefinitely. if testTimeout > 0 && testFuzz == "" { // The WaitDelay for the test process depends on both the OS I/O and // scheduling overhead and the amount of I/O generated by the test just // before it exits. We set the minimum at 5 seconds to account for the OS // overhead, and scale it up from there proportional to the overall test // timeout on the assumption that the time to write and read a goroutine // dump from a timed-out test process scales roughly with the overall // running time of the test. // // This is probably too generous when the timeout is very long, but it seems // better to hard-code a scale factor than to hard-code a constant delay. if wd := testTimeout / 10; wd < 5*time.Second { testWaitDelay = 5 * time.Second } else { testWaitDelay = wd } // We expect the test binary to terminate itself (and dump stacks) after // exactly testTimeout. We give it up to one WaitDelay or one minute, // whichever is longer, to finish dumping stacks before we send it an // external signal: if the process has a lot of goroutines, dumping stacks // after the timeout can take a while. // // After the signal is delivered, the test process may have up to one // additional WaitDelay to finish writing its output streams. if testWaitDelay < 1*time.Minute { testKillTimeout = testTimeout + 1*time.Minute } else { testKillTimeout = testTimeout + testWaitDelay } } // Read testcache expiration time, if present. // (We implement go clean -testcache by writing an expiration date // instead of searching out and deleting test result cache entries.) if dir := cache.DefaultDir(); dir != "off" { if data, _ := lockedfile.Read(filepath.Join(dir, "testexpire.txt")); len(data) > 0 && data[len(data)-1] == '\n' { if t, err := strconv.ParseInt(string(data[:len(data)-1]), 10, 64); err == nil { testCacheExpire = time.Unix(0, t) } } } b := work.NewBuilder("") defer func() { if err := b.Close(); err != nil { base.Fatal(err) } }() var builds, runs, prints []*work.Action var writeCoverMetaAct *work.Action if cfg.BuildCoverPkg != nil { match := make([]func(*load.Package) bool, len(cfg.BuildCoverPkg)) for i := range cfg.BuildCoverPkg { match[i] = load.MatchPackage(cfg.BuildCoverPkg[i], base.Cwd()) } // Select for coverage all dependencies matching the -coverpkg // patterns. plist := load.TestPackageList(ctx, pkgOpts, pkgs) testCoverPkgs = load.SelectCoverPackages(plist, match, "test") if cfg.Experiment.CoverageRedesign && len(testCoverPkgs) > 0 { // create a new singleton action that will collect up the // meta-data files from all of the packages mentioned in // "-coverpkg" and write them to a summary file. This new // action will depend on all the build actions for the // test packages, and all the run actions for these // packages will depend on it. Motivating example: // supposed we have a top level directory with three // package subdirs, "a", "b", and "c", and // from the top level, a user runs "go test -coverpkg=./... ./...". // This will result in (roughly) the following action graph: // // build("a") build("b") build("c") // | | | // link("a.test") link("b.test") link("c.test") // | | | // run("a.test") run("b.test") run("c.test") // | | | // print print print // // When -coverpkg=<pattern> is in effect, we want to // express the coverage percentage for each package as a // fraction of *all* the statements that match the // pattern, hence if "c" doesn't import "a", we need to // pass as meta-data file for "a" (emitted during the // package "a" build) to the package "c" run action, so // that it can be incorporated with "c"'s regular // metadata. To do this, we add edges from each compile // action to a "writeCoverMeta" action, then from the // writeCoverMeta action to each run action. Updated // graph: // // build("a") build("b") build("c") // | \ / | / | // | v v | / | // | writemeta <-|-------------+ | // | ||| | | // | ||\ | | // link("a.test")/\ \ link("b.test") link("c.test") // | / \ +-|--------------+ | // | / \ | \ | // | v v | v | // run("a.test") run("b.test") run("c.test") // | | | // print print print // writeCoverMetaAct = &work.Action{ Mode: "write coverage meta-data file", Actor: work.ActorFunc(work.WriteCoverMetaFilesFile), Objdir: b.NewObjdir(), } for _, p := range testCoverPkgs { p.Internal.Cover.GenMeta = true } } } // Inform the compiler that it should instrument the binary at // build-time when fuzzing is enabled. if testFuzz != "" { // Don't instrument packages which may affect coverage guidance but are // unlikely to be useful. Most of these are used by the testing or // internal/fuzz packages concurrently with fuzzing. var skipInstrumentation = map[string]bool{ "context": true, "internal/fuzz": true, "reflect": true, "runtime": true, "sync": true, "sync/atomic": true, "syscall": true, "testing": true, "time": true, } for _, p := range load.TestPackageList(ctx, pkgOpts, pkgs) { if !skipInstrumentation[p.ImportPath] { p.Internal.FuzzInstrument = true } } } // Collect all the packages imported by the packages being tested. allImports := make(map[*load.Package]bool) for _, p := range pkgs { if p.Error != nil && p.Error.IsImportCycle { continue } for _, p1 := range p.Internal.Imports { allImports[p1] = true } } if cfg.BuildCover { for _, p := range pkgs { // sync/atomic import is inserted by the cover tool if // we're using atomic mode (and not compiling // sync/atomic package itself). See #18486 and #57445. // Note that this needs to be done prior to any of the // builderTest invocations below, due to the fact that // a given package in the 'pkgs' list may import // package Q which appears later in the list (if this // happens we'll wind up building the Q compile action // before updating its deps to include sync/atomic). if cfg.BuildCoverMode == "atomic" && p.ImportPath != "sync/atomic" { load.EnsureImport(p, "sync/atomic") } // Tag the package for static meta-data generation if no // test files (this works only with the new coverage // design). Do this here (as opposed to in builderTest) so // as to handle the case where we're testing multiple // packages and one of the earlier packages imports a // later package. Note that if -coverpkg is in effect // p.Internal.Cover.GenMeta will wind up being set for // all matching packages. if len(p.TestGoFiles)+len(p.XTestGoFiles) == 0 && cfg.BuildCoverPkg == nil && cfg.Experiment.CoverageRedesign { p.Internal.Cover.GenMeta = true } } } // Prepare build + run + print actions for all packages being tested. for _, p := range pkgs { buildTest, runTest, printTest, err := builderTest(b, ctx, pkgOpts, p, allImports[p], writeCoverMetaAct) if err != nil { str := err.Error() str = strings.TrimPrefix(str, "\n") if p.ImportPath != "" { base.Errorf("# %s\n%s", p.ImportPath, str) } else { base.Errorf("%s", str) } fmt.Printf("FAIL\t%s [setup failed]\n", p.ImportPath) continue } builds = append(builds, buildTest) runs = append(runs, runTest) prints = append(prints, printTest) } // Order runs for coordinating start JSON prints. ch := make(chan struct{}) close(ch) for _, a := range runs { if r, ok := a.Actor.(*runTestActor); ok { r.prev = ch ch = make(chan struct{}) r.next = ch } } // Ultimately the goal is to print the output. root := &work.Action{Mode: "go test", Actor: work.ActorFunc(printExitStatus), Deps: prints} // Force the printing of results to happen in order, // one at a time. for i, a := range prints { if i > 0 { a.Deps = append(a.Deps, prints[i-1]) } } // Force benchmarks to run in serial. if !testC && (testBench != "") { // The first run must wait for all builds. // Later runs must wait for the previous run's print. for i, run := range runs { if i == 0 { run.Deps = append(run.Deps, builds...) } else { run.Deps = append(run.Deps, prints[i-1]) } } } b.Do(ctx, root) } var windowsBadWords = []string{ "install", "patch", "setup", "update", } func builderTest(b *work.Builder, ctx context.Context, pkgOpts load.PackageOpts, p *load.Package, imported bool, writeCoverMetaAct *work.Action) (buildAction, runAction, printAction *work.Action, err error) { if len(p.TestGoFiles)+len(p.XTestGoFiles) == 0 { if cfg.BuildCover && cfg.Experiment.CoverageRedesign { if p.Internal.Cover.GenMeta { p.Internal.Cover.Mode = cfg.BuildCoverMode } } build := b.CompileAction(work.ModeBuild, work.ModeBuild, p) run := &work.Action{ Mode: "test run", Actor: new(runTestActor), Deps: []*work.Action{build}, Objdir: b.NewObjdir(), Package: p, IgnoreFail: true, // run (prepare output) even if build failed } if writeCoverMetaAct != nil { // There is no real "run" for this package (since there // are no tests), but if coverage is turned on, we can // collect coverage data for the code in the package by // asking cmd/cover for a static meta-data file as part of // the package build. This static meta-data file is then // consumed by a pseudo-action (writeCoverMetaAct) that // adds it to a summary file, then this summary file is // consumed by the various "run test" actions. Below we // add a dependence edge between the build action and the // "write meta files" pseudo-action, and then another dep // from writeCoverMetaAct to the run action. See the // comment in runTest() at the definition of // writeCoverMetaAct for more details. run.Deps = append(run.Deps, writeCoverMetaAct) writeCoverMetaAct.Deps = append(writeCoverMetaAct.Deps, build) } addTestVet(b, p, run, nil) print := &work.Action{ Mode: "test print", Actor: work.ActorFunc(builderPrintTest), Deps: []*work.Action{run}, Package: p, IgnoreFail: true, // print even if test failed } return build, run, print, nil } // Build Package structs describing: // pmain - pkg.test binary // ptest - package + test files // pxtest - package of external test files var cover *load.TestCover if cfg.BuildCover { cover = &load.TestCover{ Mode: cfg.BuildCoverMode, Local: cfg.BuildCoverPkg == nil, Pkgs: testCoverPkgs, Paths: cfg.BuildCoverPkg, } } pmain, ptest, pxtest, err := load.TestPackagesFor(ctx, pkgOpts, p, cover) if err != nil { return nil, nil, nil, err } // If imported is true then this package is imported by some // package being tested. Make building the test version of the // package depend on building the non-test version, so that we // only report build errors once. Issue #44624. if imported && ptest != p { buildTest := b.CompileAction(work.ModeBuild, work.ModeBuild, ptest) buildP := b.CompileAction(work.ModeBuild, work.ModeBuild, p) buildTest.Deps = append(buildTest.Deps, buildP) } testBinary := testBinaryName(p) testDir := b.NewObjdir() if err := b.BackgroundShell().Mkdir(testDir); err != nil { return nil, nil, nil, err } pmain.Dir = testDir pmain.Internal.OmitDebug = !testC && !testNeedBinary() if pmain.ImportPath == "runtime.test" { // The runtime package needs a symbolized binary for its tests. // See runtime/unsafepoint_test.go. pmain.Internal.OmitDebug = false } if !cfg.BuildN { // writeTestmain writes _testmain.go, // using the test description gathered in t. if err := os.WriteFile(testDir+"_testmain.go", *pmain.Internal.TestmainGo, 0666); err != nil { return nil, nil, nil, err } } // Set compile objdir to testDir we've already created, // so that the default file path stripping applies to _testmain.go. b.CompileAction(work.ModeBuild, work.ModeBuild, pmain).Objdir = testDir a := b.LinkAction(work.ModeBuild, work.ModeBuild, pmain) a.Target = testDir + testBinary + cfg.ExeSuffix if cfg.Goos == "windows" { // There are many reserved words on Windows that, // if used in the name of an executable, cause Windows // to try to ask for extra permissions. // The word list includes setup, install, update, and patch, // but it does not appear to be defined anywhere. // We have run into this trying to run the // go.codereview/patch tests. // For package names containing those words, use test.test.exe // instead of pkgname.test.exe. // Note that this file name is only used in the Go command's // temporary directory. If the -c or other flags are // given, the code below will still use pkgname.test.exe. // There are two user-visible effects of this change. // First, you can actually run 'go test' in directories that // have names that Windows thinks are installer-like, // without getting a dialog box asking for more permissions. // Second, in the Windows process listing during go test, // the test shows up as test.test.exe, not pkgname.test.exe. // That second one is a drawback, but it seems a small // price to pay for the test running at all. // If maintaining the list of bad words is too onerous, // we could just do this always on Windows. for _, bad := range windowsBadWords { if strings.Contains(testBinary, bad) { a.Target = testDir + "test.test" + cfg.ExeSuffix break } } } buildAction = a var installAction, cleanAction *work.Action if testC || testNeedBinary() { // -c or profiling flag: create action to copy binary to ./test.out. target := filepath.Join(base.Cwd(), testBinary+cfg.ExeSuffix) isNull := false if testO != "" { target = testO if testODir { if filepath.IsAbs(target) { target = filepath.Join(target, testBinary+cfg.ExeSuffix) } else { target = filepath.Join(base.Cwd(), target, testBinary+cfg.ExeSuffix) } } else { if base.IsNull(target) { isNull = true } else if !filepath.IsAbs(target) { target = filepath.Join(base.Cwd(), target) } } } if isNull { runAction = buildAction } else { pmain.Target = target installAction = &work.Action{ Mode: "test build", Actor: work.ActorFunc(work.BuildInstallFunc), Deps: []*work.Action{buildAction}, Package: pmain, Target: target, } runAction = installAction // make sure runAction != nil even if not running test } } var vetRunAction *work.Action if testC { printAction = &work.Action{Mode: "test print (nop)", Package: p, Deps: []*work.Action{runAction}} // nop vetRunAction = printAction } else { // run test rta := &runTestActor{ writeCoverMetaAct: writeCoverMetaAct, } runAction = &work.Action{ Mode: "test run", Actor: rta, Deps: []*work.Action{buildAction}, Package: p, IgnoreFail: true, // run (prepare output) even if build failed TryCache: rta.c.tryCache, } if writeCoverMetaAct != nil { // If writeCoverMetaAct != nil, this indicates that our // "go test -coverpkg" run actions will need to read the // meta-files summary file written by writeCoverMetaAct, // so add a dependence edge from writeCoverMetaAct to the // run action. runAction.Deps = append(runAction.Deps, writeCoverMetaAct) if !p.IsTestOnly() { // Package p is not test only, meaning that the build // action for p may generate a static meta-data file. // Add a dependence edge from p to writeCoverMetaAct, // which needs to know the name of that meta-data // file. compileAction := b.CompileAction(work.ModeBuild, work.ModeBuild, p) writeCoverMetaAct.Deps = append(writeCoverMetaAct.Deps, compileAction) } } runAction.Objdir = testDir vetRunAction = runAction cleanAction = &work.Action{ Mode: "test clean", Actor: work.ActorFunc(builderCleanTest), Deps: []*work.Action{runAction}, Package: p, IgnoreFail: true, // clean even if test failed Objdir: testDir, } printAction = &work.Action{ Mode: "test print", Actor: work.ActorFunc(builderPrintTest), Deps: []*work.Action{cleanAction}, Package: p, IgnoreFail: true, // print even if test failed } } if len(ptest.GoFiles)+len(ptest.CgoFiles) > 0 { addTestVet(b, ptest, vetRunAction, installAction) } if pxtest != nil { addTestVet(b, pxtest, vetRunAction, installAction) } if installAction != nil { if runAction != installAction { installAction.Deps = append(installAction.Deps, runAction) } if cleanAction != nil { cleanAction.Deps = append(cleanAction.Deps, installAction) } } return buildAction, runAction, printAction, nil } func addTestVet(b *work.Builder, p *load.Package, runAction, installAction *work.Action) { if testVet.off { return } vet := b.VetAction(work.ModeBuild, work.ModeBuild, p) runAction.Deps = append(runAction.Deps, vet) // Install will clean the build directory. // Make sure vet runs first. // The install ordering in b.VetAction does not apply here // because we are using a custom installAction (created above). if installAction != nil { installAction.Deps = append(installAction.Deps, vet) } } var noTestsToRun = []byte("\ntesting: warning: no tests to run\n") var noFuzzTestsToFuzz = []byte("\ntesting: warning: no fuzz tests to fuzz\n") var tooManyFuzzTestsToFuzz = []byte("\ntesting: warning: -fuzz matches more than one fuzz test, won't fuzz\n") // runTestActor is the actor for running a test. type runTestActor struct { c runCache // writeCoverMetaAct points to the pseudo-action for collecting // coverage meta-data files for selected -cover test runs. See the // comment in runTest at the definition of writeCoverMetaAct for // more details. writeCoverMetaAct *work.Action // sequencing of json start messages, to preserve test order prev <-chan struct{} // wait to start until prev is closed next chan<- struct{} // close next once the next test can start. } // runCache is the cache for running a single test. type runCache struct { disableCache bool // cache should be disabled for this run buf *bytes.Buffer id1 cache.ActionID id2 cache.ActionID } // stdoutMu and lockedStdout provide a locked standard output // that guarantees never to interlace writes from multiple // goroutines, so that we can have multiple JSON streams writing // to a lockedStdout simultaneously and know that events will // still be intelligible. var stdoutMu sync.Mutex type lockedStdout struct{} func (lockedStdout) Write(b []byte) (int, error) { stdoutMu.Lock() defer stdoutMu.Unlock() return os.Stdout.Write(b) } func (r *runTestActor) Act(b *work.Builder, ctx context.Context, a *work.Action) error { sh := b.Shell(a) // Wait for previous test to get started and print its first json line. select { case <-r.prev: case <-base.Interrupted: // We can't wait for the previous test action to complete: we don't start // new actions after an interrupt, so if that action wasn't already running // it might never happen. Instead, just don't log anything for this action. base.SetExitStatus(1) return nil } var stdout io.Writer = os.Stdout var err error if testJSON { json := test2json.NewConverter(lockedStdout{}, a.Package.ImportPath, test2json.Timestamp) defer func() { json.Exited(err) json.Close() }() stdout = json } // Release next test to start (test2json.NewConverter writes the start event). close(r.next) if a.Failed { // We were unable to build the binary. a.Failed = false fmt.Fprintf(stdout, "FAIL\t%s [build failed]\n", a.Package.ImportPath) // Tell the JSON converter that this was a failure, not a passing run. err = errors.New("build failed") base.SetExitStatus(1) return nil } coverProfTempFile := func(a *work.Action) string { if a.Objdir == "" { panic("internal error: objdir not set in coverProfTempFile") } return a.Objdir + "_cover_.out" } if p := a.Package; len(p.TestGoFiles)+len(p.XTestGoFiles) == 0 { reportNoTestFiles := true if cfg.BuildCover && cfg.Experiment.CoverageRedesign && p.Internal.Cover.GenMeta { if err := sh.Mkdir(a.Objdir); err != nil { return err } mf, err := work.BuildActionCoverMetaFile(a) if err != nil { return err } else if mf != "" { reportNoTestFiles = false // Write out "percent statements covered". if err := work.WriteCoveragePercent(b, a, mf, stdout); err != nil { return err } // If -coverprofile is in effect, then generate a // coverage profile fragment for this package and // merge it with the final -coverprofile output file. if coverMerge.f != nil { cp := coverProfTempFile(a) if err := work.WriteCoverageProfile(b, a, mf, cp, stdout); err != nil { return err } mergeCoverProfile(stdout, cp) } } } if reportNoTestFiles { fmt.Fprintf(stdout, "? \t%s\t[no test files]\n", p.ImportPath) } return nil } var buf bytes.Buffer if len(pkgArgs) == 0 || testBench != "" || testFuzz != "" { // Stream test output (no buffering) when no package has // been given on the command line (implicit current directory) // or when benchmarking or fuzzing. // No change to stdout. } else { // If we're only running a single package under test or if parallelism is // set to 1, and if we're displaying all output (testShowPass), we can // hurry the output along, echoing it as soon as it comes in. // We still have to copy to &buf for caching the result. This special // case was introduced in Go 1.5 and is intentionally undocumented: // the exact details of output buffering are up to the go command and // subject to change. It would be nice to remove this special case // entirely, but it is surely very helpful to see progress being made // when tests are run on slow single-CPU ARM systems. // // If we're showing JSON output, then display output as soon as // possible even when multiple tests are being run: the JSON output // events are attributed to specific package tests, so interlacing them // is OK. if testShowPass() && (len(pkgs) == 1 || cfg.BuildP == 1) || testJSON { // Write both to stdout and buf, for possible saving // to cache, and for looking for the "no tests to run" message. stdout = io.MultiWriter(stdout, &buf) } else { stdout = &buf } } if r.c.buf == nil { // We did not find a cached result using the link step action ID, // so we ran the link step. Try again now with the link output // content ID. The attempt using the action ID makes sure that // if the link inputs don't change, we reuse the cached test // result without even rerunning the linker. The attempt using // the link output (test binary) content ID makes sure that if // we have different link inputs but the same final binary, // we still reuse the cached test result. // c.saveOutput will store the result under both IDs. r.c.tryCacheWithID(b, a, a.Deps[0].BuildContentID()) } if r.c.buf != nil { if stdout != &buf { stdout.Write(r.c.buf.Bytes()) r.c.buf.Reset() } a.TestOutput = r.c.buf return nil } execCmd := work.FindExecCmd() testlogArg := []string{} if !r.c.disableCache && len(execCmd) == 0 { testlogArg = []string{"-test.testlogfile=" + a.Objdir + "testlog.txt"} } panicArg := "-test.paniconexit0" fuzzArg := []string{} if testFuzz != "" { fuzzCacheDir := filepath.Join(cache.Default().FuzzDir(), a.Package.ImportPath) fuzzArg = []string{"-test.fuzzcachedir=" + fuzzCacheDir} } coverdirArg := []string{} addToEnv := "" if cfg.BuildCover { gcd := filepath.Join(a.Objdir, "gocoverdir") if err := sh.Mkdir(gcd); err != nil { // If we can't create a temp dir, terminate immediately // with an error as opposed to returning an error to the // caller; failed MkDir most likely indicates that we're // out of disk space or there is some other systemic error // that will make forward progress unlikely. base.Fatalf("failed to create temporary dir: %v", err) } coverdirArg = append(coverdirArg, "-test.gocoverdir="+gcd) if r.writeCoverMetaAct != nil { // Copy the meta-files file over into the test's coverdir // directory so that the coverage runtime support will be // able to find it. src := r.writeCoverMetaAct.Objdir + coverage.MetaFilesFileName dst := filepath.Join(gcd, coverage.MetaFilesFileName) if err := sh.CopyFile(dst, src, 0666, false); err != nil { return err } } // Even though we are passing the -test.gocoverdir option to // the test binary, also set GOCOVERDIR as well. This is // intended to help with tests that run "go build" to build // fresh copies of tools to test as part of the testing. addToEnv = "GOCOVERDIR=" + gcd } args := str.StringList(execCmd, a.Deps[0].BuiltTarget(), testlogArg, panicArg, fuzzArg, coverdirArg, testArgs) if testCoverProfile != "" { // Write coverage to temporary profile, for merging later. for i, arg := range args { if strings.HasPrefix(arg, "-test.coverprofile=") { args[i] = "-test.coverprofile=" + coverProfTempFile(a) } } } if cfg.BuildN || cfg.BuildX { sh.ShowCmd("", "%s", strings.Join(args, " ")) if cfg.BuildN { return nil } } // Normally, the test will terminate itself when the timeout expires, // but add a last-ditch deadline to detect and stop wedged binaries. ctx, cancel := context.WithTimeout(ctx, testKillTimeout) defer cancel() // Now we're ready to actually run the command. // // If the -o flag is set, or if at some point we change cmd/go to start // copying test executables into the build cache, we may run into spurious // ETXTBSY errors on Unix platforms (see https://go.dev/issue/22315). // // Since we know what causes those, and we know that they should resolve // quickly (the ETXTBSY error will resolve as soon as the subprocess // holding the descriptor open reaches its 'exec' call), we retry them // in a loop. var ( cmd *exec.Cmd t0 time.Time cancelKilled = false cancelSignaled = false ) for { cmd = exec.CommandContext(ctx, args[0], args[1:]...) cmd.Dir = a.Package.Dir env := slices.Clip(cfg.OrigEnv) env = base.AppendPATH(env) env = base.AppendPWD(env, cmd.Dir) cmd.Env = env if addToEnv != "" { cmd.Env = append(cmd.Env, addToEnv) } cmd.Stdout = stdout cmd.Stderr = stdout cmd.Cancel = func() error { if base.SignalTrace == nil { err := cmd.Process.Kill() if err == nil { cancelKilled = true } return err } // Send a quit signal in the hope that the program will print // a stack trace and exit. err := cmd.Process.Signal(base.SignalTrace) if err == nil { cancelSignaled = true } return err } cmd.WaitDelay = testWaitDelay base.StartSigHandlers() t0 = time.Now() err = cmd.Run() if !isETXTBSY(err) { // We didn't hit the race in #22315, so there is no reason to retry the // command. break } } out := buf.Bytes() a.TestOutput = &buf t := fmt.Sprintf("%.3fs", time.Since(t0).Seconds()) mergeCoverProfile(cmd.Stdout, a.Objdir+"_cover_.out") if err == nil { norun := "" if !testShowPass() && !testJSON { buf.Reset() } if bytes.HasPrefix(out, noTestsToRun[1:]) || bytes.Contains(out, noTestsToRun) { norun = " [no tests to run]" } if bytes.HasPrefix(out, noFuzzTestsToFuzz[1:]) || bytes.Contains(out, noFuzzTestsToFuzz) { norun = " [no fuzz tests to fuzz]" } if bytes.HasPrefix(out, tooManyFuzzTestsToFuzz[1:]) || bytes.Contains(out, tooManyFuzzTestsToFuzz) { norun = "[-fuzz matches more than one fuzz test, won't fuzz]" } if len(out) > 0 && !bytes.HasSuffix(out, []byte("\n")) { // Ensure that the output ends with a newline before the "ok" // line we're about to print (https://golang.org/issue/49317). cmd.Stdout.Write([]byte("\n")) } fmt.Fprintf(cmd.Stdout, "ok \t%s\t%s%s%s\n", a.Package.ImportPath, t, coveragePercentage(out), norun) r.c.saveOutput(a) } else { base.SetExitStatus(1) if cancelSignaled { fmt.Fprintf(cmd.Stdout, "*** Test killed with %v: ran too long (%v).\n", base.SignalTrace, testKillTimeout) } else if cancelKilled { fmt.Fprintf(cmd.Stdout, "*** Test killed: ran too long (%v).\n", testKillTimeout) } else if errors.Is(err, exec.ErrWaitDelay) { fmt.Fprintf(cmd.Stdout, "*** Test I/O incomplete %v after exiting.\n", cmd.WaitDelay) } var ee *exec.ExitError if len(out) == 0 || !errors.As(err, &ee) || !ee.Exited() { // If there was no test output, print the exit status so that the reason // for failure is clear. fmt.Fprintf(cmd.Stdout, "%s\n", err) } else if !bytes.HasSuffix(out, []byte("\n")) { // Otherwise, ensure that the output ends with a newline before the FAIL // line we're about to print (https://golang.org/issue/49317). cmd.Stdout.Write([]byte("\n")) } // NOTE(golang.org/issue/37555): test2json reports that a test passes // unless "FAIL" is printed at the beginning of a line. The test may not // actually print that if it panics, exits, or terminates abnormally, // so we print it here. We can't always check whether it was printed // because some tests need stdout to be a terminal (golang.org/issue/34791), // not a pipe. // TODO(golang.org/issue/29062): tests that exit with status 0 without // printing a final result should fail. prefix := "" if testJSON || testV.json { prefix = "\x16" } fmt.Fprintf(cmd.Stdout, "%sFAIL\t%s\t%s\n", prefix, a.Package.ImportPath, t) } if cmd.Stdout != &buf { buf.Reset() // cmd.Stdout was going to os.Stdout already } return nil } // tryCache is called just before the link attempt, // to see if the test result is cached and therefore the link is unneeded. // It reports whether the result can be satisfied from cache. func (c *runCache) tryCache(b *work.Builder, a *work.Action) bool { return c.tryCacheWithID(b, a, a.Deps[0].BuildActionID()) } func (c *runCache) tryCacheWithID(b *work.Builder, a *work.Action, id string) bool { if len(pkgArgs) == 0 { // Caching does not apply to "go test", // only to "go test foo" (including "go test ."). if cache.DebugTest { fmt.Fprintf(os.Stderr, "testcache: caching disabled in local directory mode\n") } c.disableCache = true return false } if a.Package.Root == "" { // Caching does not apply to tests outside of any module, GOPATH, or GOROOT. if cache.DebugTest { fmt.Fprintf(os.Stderr, "testcache: caching disabled for package outside of module root, GOPATH, or GOROOT: %s\n", a.Package.ImportPath) } c.disableCache = true return false } var cacheArgs []string for _, arg := range testArgs { i := strings.Index(arg, "=") if i < 0 || !strings.HasPrefix(arg, "-test.") { if cache.DebugTest { fmt.Fprintf(os.Stderr, "testcache: caching disabled for test argument: %s\n", arg) } c.disableCache = true return false } switch arg[:i] { case "-test.benchtime", "-test.cpu", "-test.list", "-test.parallel", "-test.run", "-test.short", "-test.timeout", "-test.failfast", "-test.v": // These are cacheable. // Note that this list is documented above, // so if you add to this list, update the docs too. cacheArgs = append(cacheArgs, arg) default: // nothing else is cacheable if cache.DebugTest { fmt.Fprintf(os.Stderr, "testcache: caching disabled for test argument: %s\n", arg) } c.disableCache = true return false } } // The test cache result fetch is a two-level lookup. // // First, we use the content hash of the test binary // and its command-line arguments to find the // list of environment variables and files consulted // the last time the test was run with those arguments. // (To avoid unnecessary links, we store this entry // under two hashes: id1 uses the linker inputs as a // proxy for the test binary, and id2 uses the actual // test binary. If the linker inputs are unchanged, // this way we avoid the link step, even though we // do not cache link outputs.) // // Second, we compute a hash of the values of the // environment variables and the content of the files // listed in the log from the previous run. // Then we look up test output using a combination of // the hash from the first part (testID) and the hash of the // test inputs (testInputsID). // // In order to store a new test result, we must redo the // testInputsID computation using the log from the run // we want to cache, and then we store that new log and // the new outputs. h := cache.NewHash("testResult") fmt.Fprintf(h, "test binary %s args %q execcmd %q", id, cacheArgs, work.ExecCmd) testID := h.Sum() if c.id1 == (cache.ActionID{}) { c.id1 = testID } else { c.id2 = testID } if cache.DebugTest { fmt.Fprintf(os.Stderr, "testcache: %s: test ID %x => %x\n", a.Package.ImportPath, id, testID) } // Load list of referenced environment variables and files // from last run of testID, and compute hash of that content. data, entry, err := cache.GetBytes(cache.Default(), testID) if !bytes.HasPrefix(data, testlogMagic) || data[len(data)-1] != '\n' { if cache.DebugTest { if err != nil { fmt.Fprintf(os.Stderr, "testcache: %s: input list not found: %v\n", a.Package.ImportPath, err) } else { fmt.Fprintf(os.Stderr, "testcache: %s: input list malformed\n", a.Package.ImportPath) } } return false } testInputsID, err := computeTestInputsID(a, data) if err != nil { return false } if cache.DebugTest { fmt.Fprintf(os.Stderr, "testcache: %s: test ID %x => input ID %x => %x\n", a.Package.ImportPath, testID, testInputsID, testAndInputKey(testID, testInputsID)) } // Parse cached result in preparation for changing run time to "(cached)". // If we can't parse the cached result, don't use it. data, entry, err = cache.GetBytes(cache.Default(), testAndInputKey(testID, testInputsID)) if len(data) == 0 || data[len(data)-1] != '\n' { if cache.DebugTest { if err != nil { fmt.Fprintf(os.Stderr, "testcache: %s: test output not found: %v\n", a.Package.ImportPath, err) } else { fmt.Fprintf(os.Stderr, "testcache: %s: test output malformed\n", a.Package.ImportPath) } } return false } if entry.Time.Before(testCacheExpire) { if cache.DebugTest { fmt.Fprintf(os.Stderr, "testcache: %s: test output expired due to go clean -testcache\n", a.Package.ImportPath) } return false } i := bytes.LastIndexByte(data[:len(data)-1], '\n') + 1 if !bytes.HasPrefix(data[i:], []byte("ok \t")) { if cache.DebugTest { fmt.Fprintf(os.Stderr, "testcache: %s: test output malformed\n", a.Package.ImportPath) } return false } j := bytes.IndexByte(data[i+len("ok \t"):], '\t') if j < 0 { if cache.DebugTest { fmt.Fprintf(os.Stderr, "testcache: %s: test output malformed\n", a.Package.ImportPath) } return false } j += i + len("ok \t") + 1 // Committed to printing. c.buf = new(bytes.Buffer) c.buf.Write(data[:j]) c.buf.WriteString("(cached)") for j < len(data) && ('0' <= data[j] && data[j] <= '9' || data[j] == '.' || data[j] == 's') { j++ } c.buf.Write(data[j:]) return true } var errBadTestInputs = errors.New("error parsing test inputs") var testlogMagic = []byte("# test log\n") // known to testing/internal/testdeps/deps.go // computeTestInputsID computes the "test inputs ID" // (see comment in tryCacheWithID above) for the // test log. func computeTestInputsID(a *work.Action, testlog []byte) (cache.ActionID, error) { testlog = bytes.TrimPrefix(testlog, testlogMagic) h := cache.NewHash("testInputs") pwd := a.Package.Dir for _, line := range bytes.Split(testlog, []byte("\n")) { if len(line) == 0 { continue } s := string(line) op, name, found := strings.Cut(s, " ") if !found { if cache.DebugTest { fmt.Fprintf(os.Stderr, "testcache: %s: input list malformed (%q)\n", a.Package.ImportPath, line) } return cache.ActionID{}, errBadTestInputs } switch op { default: if cache.DebugTest { fmt.Fprintf(os.Stderr, "testcache: %s: input list malformed (%q)\n", a.Package.ImportPath, line) } return cache.ActionID{}, errBadTestInputs case "getenv": fmt.Fprintf(h, "env %s %x\n", name, hashGetenv(name)) case "chdir": pwd = name // always absolute fmt.Fprintf(h, "chdir %s %x\n", name, hashStat(name)) case "stat": if !filepath.IsAbs(name) { name = filepath.Join(pwd, name) } if a.Package.Root == "" || search.InDir(name, a.Package.Root) == "" { // Do not recheck files outside the module, GOPATH, or GOROOT root. break } fmt.Fprintf(h, "stat %s %x\n", name, hashStat(name)) case "open": if !filepath.IsAbs(name) { name = filepath.Join(pwd, name) } if a.Package.Root == "" || search.InDir(name, a.Package.Root) == "" { // Do not recheck files outside the module, GOPATH, or GOROOT root. break } fh, err := hashOpen(name) if err != nil { if cache.DebugTest { fmt.Fprintf(os.Stderr, "testcache: %s: input file %s: %s\n", a.Package.ImportPath, name, err) } return cache.ActionID{}, err } fmt.Fprintf(h, "open %s %x\n", name, fh) } } sum := h.Sum() return sum, nil } func hashGetenv(name string) cache.ActionID { h := cache.NewHash("getenv") v, ok := os.LookupEnv(name) if !ok { h.Write([]byte{0}) } else { h.Write([]byte{1}) h.Write([]byte(v)) } return h.Sum() } const modTimeCutoff = 2 * time.Second var errFileTooNew = errors.New("file used as input is too new") func hashOpen(name string) (cache.ActionID, error) { h := cache.NewHash("open") info, err := os.Stat(name) if err != nil { fmt.Fprintf(h, "err %v\n", err) return h.Sum(), nil } hashWriteStat(h, info) if info.IsDir() { files, err := os.ReadDir(name) if err != nil { fmt.Fprintf(h, "err %v\n", err) } for _, f := range files { fmt.Fprintf(h, "file %s ", f.Name()) finfo, err := f.Info() if err != nil { fmt.Fprintf(h, "err %v\n", err) } else { hashWriteStat(h, finfo) } } } else if info.Mode().IsRegular() { // Because files might be very large, do not attempt // to hash the entirety of their content. Instead assume // the mtime and size recorded in hashWriteStat above // are good enough. // // To avoid problems for very recent files where a new // write might not change the mtime due to file system // mtime precision, reject caching if a file was read that // is less than modTimeCutoff old. if time.Since(info.ModTime()) < modTimeCutoff { return cache.ActionID{}, errFileTooNew } } return h.Sum(), nil } func hashStat(name string) cache.ActionID { h := cache.NewHash("stat") if info, err := os.Stat(name); err != nil { fmt.Fprintf(h, "err %v\n", err) } else { hashWriteStat(h, info) } if info, err := os.Lstat(name); err != nil { fmt.Fprintf(h, "err %v\n", err) } else { hashWriteStat(h, info) } return h.Sum() } func hashWriteStat(h io.Writer, info fs.FileInfo) { fmt.Fprintf(h, "stat %d %x %v %v\n", info.Size(), uint64(info.Mode()), info.ModTime(), info.IsDir()) } // testAndInputKey returns the actual cache key for the pair (testID, testInputsID). func testAndInputKey(testID, testInputsID cache.ActionID) cache.ActionID { return cache.Subkey(testID, fmt.Sprintf("inputs:%x", testInputsID)) } func (c *runCache) saveOutput(a *work.Action) { if c.id1 == (cache.ActionID{}) && c.id2 == (cache.ActionID{}) { return } // See comment about two-level lookup in tryCacheWithID above. testlog, err := os.ReadFile(a.Objdir + "testlog.txt") if err != nil || !bytes.HasPrefix(testlog, testlogMagic) || testlog[len(testlog)-1] != '\n' { if cache.DebugTest { if err != nil { fmt.Fprintf(os.Stderr, "testcache: %s: reading testlog: %v\n", a.Package.ImportPath, err) } else { fmt.Fprintf(os.Stderr, "testcache: %s: reading testlog: malformed\n", a.Package.ImportPath) } } return } testInputsID, err := computeTestInputsID(a, testlog) if err != nil { return } if c.id1 != (cache.ActionID{}) { if cache.DebugTest { fmt.Fprintf(os.Stderr, "testcache: %s: save test ID %x => input ID %x => %x\n", a.Package.ImportPath, c.id1, testInputsID, testAndInputKey(c.id1, testInputsID)) } cache.PutNoVerify(cache.Default(), c.id1, bytes.NewReader(testlog)) cache.PutNoVerify(cache.Default(), testAndInputKey(c.id1, testInputsID), bytes.NewReader(a.TestOutput.Bytes())) } if c.id2 != (cache.ActionID{}) { if cache.DebugTest { fmt.Fprintf(os.Stderr, "testcache: %s: save test ID %x => input ID %x => %x\n", a.Package.ImportPath, c.id2, testInputsID, testAndInputKey(c.id2, testInputsID)) } cache.PutNoVerify(cache.Default(), c.id2, bytes.NewReader(testlog)) cache.PutNoVerify(cache.Default(), testAndInputKey(c.id2, testInputsID), bytes.NewReader(a.TestOutput.Bytes())) } } // coveragePercentage returns the coverage results (if enabled) for the // test. It uncovers the data by scanning the output from the test run. func coveragePercentage(out []byte) string { if !cfg.BuildCover { return "" } // The string looks like // test coverage for encoding/binary: 79.9% of statements // Extract the piece from the percentage to the end of the line. re := regexp.MustCompile(`coverage: (.*)\n`) matches := re.FindSubmatch(out) if matches == nil { // Probably running "go test -cover" not "go test -cover fmt". // The coverage output will appear in the output directly. return "" } return fmt.Sprintf("\tcoverage: %s", matches[1]) } // builderCleanTest is the action for cleaning up after a test. func builderCleanTest(b *work.Builder, ctx context.Context, a *work.Action) error { if cfg.BuildWork { return nil } b.Shell(a).RemoveAll(a.Objdir) return nil } // builderPrintTest is the action for printing a test result. func builderPrintTest(b *work.Builder, ctx context.Context, a *work.Action) error { clean := a.Deps[0] run := clean.Deps[0] if run.TestOutput != nil { os.Stdout.Write(run.TestOutput.Bytes()) run.TestOutput = nil } return nil } // printExitStatus is the action for printing the final exit status. // If we are running multiple test targets, print a final "FAIL" // in case a failure in an early package has already scrolled // off of the user's terminal. // (See https://golang.org/issue/30507#issuecomment-470593235.) // // In JSON mode, we need to maintain valid JSON output and // we assume that the test output is being parsed by a tool // anyway, so the failure will not be missed and would be // awkward to try to wedge into the JSON stream. // // In fuzz mode, we only allow a single package for now // (see CL 350156 and https://golang.org/issue/46312), // so there is no possibility of scrolling off and no need // to print the final status. func printExitStatus(b *work.Builder, ctx context.Context, a *work.Action) error { if !testJSON && testFuzz == "" && len(pkgArgs) != 0 { if base.GetExitStatus() != 0 { fmt.Println("FAIL") return nil } } return nil } // testBinaryName can be used to create name for test binary executable. // Use last element of import path, not package name. // They differ when package name is "main". // But if the import path is "command-line-arguments", // like it is during 'go run', use the package name. func testBinaryName(p *load.Package) string { var elem string if p.ImportPath == "command-line-arguments" { elem = p.Name } else { elem = p.DefaultExecName() } return elem + ".test" } PK ! ��[ [ flagdefs_test.gonu �[��� // Copyright 2019 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 test import ( "cmd/go/internal/cfg" "cmd/go/internal/test/internal/genflags" "internal/testenv" "maps" "os" "testing" ) func TestMain(m *testing.M) { cfg.SetGOROOT(testenv.GOROOT(nil), false) os.Exit(m.Run()) } func TestPassFlagToTest(t *testing.T) { wantNames := genflags.ShortTestFlags() missing := map[string]bool{} for _, name := range wantNames { if !passFlagToTest[name] { missing[name] = true } } if len(missing) > 0 { t.Errorf("passFlagToTest is missing entries: %v", missing) } extra := maps.Clone(passFlagToTest) for _, name := range wantNames { delete(extra, name) } if len(extra) > 0 { t.Errorf("passFlagToTest contains extra entries: %v", extra) } if t.Failed() { t.Logf("To regenerate:\n\tgo generate cmd/go/internal/test") } } func TestPassAnalyzersToVet(t *testing.T) { testenv.MustHaveGoBuild(t) // runs 'go tool vet -flags' wantNames, err := genflags.VetAnalyzers() if err != nil { t.Fatal(err) } missing := map[string]bool{} for _, name := range wantNames { if !passAnalyzersToVet[name] { missing[name] = true } } if len(missing) > 0 { t.Errorf("passAnalyzersToVet is missing entries: %v", missing) } extra := maps.Clone(passAnalyzersToVet) for _, name := range wantNames { delete(extra, name) } if len(extra) > 0 { t.Errorf("passFlagToTest contains extra entries: %v", extra) } if t.Failed() { t.Logf("To regenerate:\n\tgo generate cmd/go/internal/test") } } PK ! ��� � inst_test.gonu �[��� // Copyright 2021 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 test import ( "internal/testenv" "os" "path/filepath" "regexp" "testing" ) // TestInst tests that only one instantiation of Sort is created, even though generic // Sort is used for multiple pointer types across two packages. func TestInst(t *testing.T) { testenv.MustHaveGoBuild(t) testenv.MustHaveGoRun(t) // Build ptrsort.go, which uses package mysort. var output []byte var err error filename := "ptrsort.go" exename := "ptrsort" outname := "ptrsort.out" gotool := testenv.GoToolPath(t) dest := filepath.Join(t.TempDir(), exename) cmd := testenv.Command(t, gotool, "build", "-o", dest, filepath.Join("testdata", filename)) if output, err = cmd.CombinedOutput(); err != nil { t.Fatalf("Failed: %v:\nOutput: %s\n", err, output) } // Test that there is exactly one shape-based instantiation of Sort in // the executable. cmd = testenv.Command(t, gotool, "tool", "nm", dest) if output, err = cmd.CombinedOutput(); err != nil { t.Fatalf("Failed: %v:\nOut: %s\n", err, output) } // Look for shape-based instantiation of Sort, but ignore any extra wrapper // ending in "-tramp" (which are created on riscv). re := regexp.MustCompile(`\bSort\[.*shape.*\][^-]`) r := re.FindAllIndex(output, -1) if len(r) != 1 { t.Fatalf("Wanted 1 instantiations of Sort function, got %d\n", len(r)) } // Actually run the test and make sure output is correct. cmd = testenv.Command(t, gotool, "run", filepath.Join("testdata", filename)) if output, err = cmd.CombinedOutput(); err != nil { t.Fatalf("Failed: %v:\nOut: %s\n", err, output) } out, err := os.ReadFile(filepath.Join("testdata", outname)) if err != nil { t.Fatalf("Could not find %s\n", outname) } if string(out) != string(output) { t.Fatalf("Wanted output %v, got %v\n", string(out), string(output)) } } PK ! ����! ! memcombine_test.gonu �[��� // Copyright 2023 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 test import ( "encoding/binary" "testing" ) var gv = [16]byte{0, 1, 2, 3, 4, 5, 6, 7, 8} //go:noinline func readGlobalUnaligned() uint64 { return binary.LittleEndian.Uint64(gv[1:]) } func TestUnalignedGlobal(t *testing.T) { // Note: this is a test not so much of the result of the read, but of // the correct compilation of that read. On s390x unaligned global // accesses fail to compile. if got, want := readGlobalUnaligned(), uint64(0x0807060504030201); got != want { t.Errorf("read global %x, want %x", got, want) } } func TestSpillOfExtendedEndianLoads(t *testing.T) { b := []byte{0xaa, 0xbb, 0xcc, 0xdd} var testCases = []struct { fn func([]byte) uint64 want uint64 }{ {readUint16le, 0xbbaa}, {readUint16be, 0xaabb}, {readUint32le, 0xddccbbaa}, {readUint32be, 0xaabbccdd}, } for _, test := range testCases { if got := test.fn(b); got != test.want { t.Errorf("got %x, want %x", got, test.want) } } } func readUint16le(b []byte) uint64 { y := uint64(binary.LittleEndian.Uint16(b)) nop() // force spill return y } func readUint16be(b []byte) uint64 { y := uint64(binary.BigEndian.Uint16(b)) nop() // force spill return y } func readUint32le(b []byte) uint64 { y := uint64(binary.LittleEndian.Uint32(b)) nop() // force spill return y } func readUint32be(b []byte) uint64 { y := uint64(binary.BigEndian.Uint32(b)) nop() // force spill return y } //go:noinline func nop() { } type T32 struct { a, b uint32 } //go:noinline func (t *T32) bigEndianLoad() uint64 { return uint64(t.a)<<32 | uint64(t.b) } //go:noinline func (t *T32) littleEndianLoad() uint64 { return uint64(t.a) | (uint64(t.b) << 32) } //go:noinline func (t *T32) bigEndianStore(x uint64) { t.a = uint32(x >> 32) t.b = uint32(x) } //go:noinline func (t *T32) littleEndianStore(x uint64) { t.a = uint32(x) t.b = uint32(x >> 32) } type T16 struct { a, b uint16 } //go:noinline func (t *T16) bigEndianLoad() uint32 { return uint32(t.a)<<16 | uint32(t.b) } //go:noinline func (t *T16) littleEndianLoad() uint32 { return uint32(t.a) | (uint32(t.b) << 16) } //go:noinline func (t *T16) bigEndianStore(x uint32) { t.a = uint16(x >> 16) t.b = uint16(x) } //go:noinline func (t *T16) littleEndianStore(x uint32) { t.a = uint16(x) t.b = uint16(x >> 16) } type T8 struct { a, b uint8 } //go:noinline func (t *T8) bigEndianLoad() uint16 { return uint16(t.a)<<8 | uint16(t.b) } //go:noinline func (t *T8) littleEndianLoad() uint16 { return uint16(t.a) | (uint16(t.b) << 8) } //go:noinline func (t *T8) bigEndianStore(x uint16) { t.a = uint8(x >> 8) t.b = uint8(x) } //go:noinline func (t *T8) littleEndianStore(x uint16) { t.a = uint8(x) t.b = uint8(x >> 8) } func TestIssue64468(t *testing.T) { t32 := T32{1, 2} if got, want := t32.bigEndianLoad(), uint64(1<<32+2); got != want { t.Errorf("T32.bigEndianLoad got %x want %x\n", got, want) } if got, want := t32.littleEndianLoad(), uint64(1+2<<32); got != want { t.Errorf("T32.littleEndianLoad got %x want %x\n", got, want) } t16 := T16{1, 2} if got, want := t16.bigEndianLoad(), uint32(1<<16+2); got != want { t.Errorf("T16.bigEndianLoad got %x want %x\n", got, want) } if got, want := t16.littleEndianLoad(), uint32(1+2<<16); got != want { t.Errorf("T16.littleEndianLoad got %x want %x\n", got, want) } t8 := T8{1, 2} if got, want := t8.bigEndianLoad(), uint16(1<<8+2); got != want { t.Errorf("T8.bigEndianLoad got %x want %x\n", got, want) } if got, want := t8.littleEndianLoad(), uint16(1+2<<8); got != want { t.Errorf("T8.littleEndianLoad got %x want %x\n", got, want) } t32.bigEndianStore(1<<32 + 2) if got, want := t32, (T32{1, 2}); got != want { t.Errorf("T32.bigEndianStore got %x want %x\n", got, want) } t32.littleEndianStore(1<<32 + 2) if got, want := t32, (T32{2, 1}); got != want { t.Errorf("T32.littleEndianStore got %x want %x\n", got, want) } t16.bigEndianStore(1<<16 + 2) if got, want := t16, (T16{1, 2}); got != want { t.Errorf("T16.bigEndianStore got %x want %x\n", got, want) } t16.littleEndianStore(1<<16 + 2) if got, want := t16, (T16{2, 1}); got != want { t.Errorf("T16.littleEndianStore got %x want %x\n", got, want) } t8.bigEndianStore(1<<8 + 2) if got, want := t8, (T8{1, 2}); got != want { t.Errorf("T8.bigEndianStore got %x want %x\n", got, want) } t8.littleEndianStore(1<<8 + 2) if got, want := t8, (T8{2, 1}); got != want { t.Errorf("T8.littleEndianStore got %x want %x\n", got, want) } } PK ! 6f� � divconst_test.gonu �[��� // 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. package test import ( "testing" ) var boolres bool var i64res int64 func BenchmarkDivconstI64(b *testing.B) { for i := 0; i < b.N; i++ { i64res = int64(i) / 7 } } func BenchmarkModconstI64(b *testing.B) { for i := 0; i < b.N; i++ { i64res = int64(i) % 7 } } func BenchmarkDivisiblePow2constI64(b *testing.B) { for i := 0; i < b.N; i++ { boolres = int64(i)%16 == 0 } } func BenchmarkDivisibleconstI64(b *testing.B) { for i := 0; i < b.N; i++ { boolres = int64(i)%7 == 0 } } func BenchmarkDivisibleWDivconstI64(b *testing.B) { for i := 0; i < b.N; i++ { i64res = int64(i) / 7 boolres = int64(i)%7 == 0 } } var u64res uint64 func TestDivmodConstU64(t *testing.T) { // Test division by c. Function f must be func(n) { return n/c, n%c } testdiv := func(c uint64, f func(uint64) (uint64, uint64)) func(*testing.T) { return func(t *testing.T) { x := uint64(12345) for i := 0; i < 10000; i++ { x += x << 2 q, r := f(x) if r < 0 || r >= c || q*c+r != x { t.Errorf("divmod(%d, %d) returned incorrect (%d, %d)", x, c, q, r) } } max := uint64(1<<64-1) / c * c xs := []uint64{0, 1, c - 1, c, c + 1, 2*c - 1, 2 * c, 2*c + 1, c*c - 1, c * c, c*c + 1, max - 1, max, max + 1, 1<<64 - 1} for _, x := range xs { q, r := f(x) if r < 0 || r >= c || q*c+r != x { t.Errorf("divmod(%d, %d) returned incorrect (%d, %d)", x, c, q, r) } } } } t.Run("2", testdiv(2, func(n uint64) (uint64, uint64) { return n / 2, n % 2 })) t.Run("3", testdiv(3, func(n uint64) (uint64, uint64) { return n / 3, n % 3 })) t.Run("4", testdiv(4, func(n uint64) (uint64, uint64) { return n / 4, n % 4 })) t.Run("5", testdiv(5, func(n uint64) (uint64, uint64) { return n / 5, n % 5 })) t.Run("6", testdiv(6, func(n uint64) (uint64, uint64) { return n / 6, n % 6 })) t.Run("7", testdiv(7, func(n uint64) (uint64, uint64) { return n / 7, n % 7 })) t.Run("8", testdiv(8, func(n uint64) (uint64, uint64) { return n / 8, n % 8 })) t.Run("9", testdiv(9, func(n uint64) (uint64, uint64) { return n / 9, n % 9 })) t.Run("10", testdiv(10, func(n uint64) (uint64, uint64) { return n / 10, n % 10 })) t.Run("11", testdiv(11, func(n uint64) (uint64, uint64) { return n / 11, n % 11 })) t.Run("12", testdiv(12, func(n uint64) (uint64, uint64) { return n / 12, n % 12 })) t.Run("13", testdiv(13, func(n uint64) (uint64, uint64) { return n / 13, n % 13 })) t.Run("14", testdiv(14, func(n uint64) (uint64, uint64) { return n / 14, n % 14 })) t.Run("15", testdiv(15, func(n uint64) (uint64, uint64) { return n / 15, n % 15 })) t.Run("16", testdiv(16, func(n uint64) (uint64, uint64) { return n / 16, n % 16 })) t.Run("17", testdiv(17, func(n uint64) (uint64, uint64) { return n / 17, n % 17 })) t.Run("255", testdiv(255, func(n uint64) (uint64, uint64) { return n / 255, n % 255 })) t.Run("256", testdiv(256, func(n uint64) (uint64, uint64) { return n / 256, n % 256 })) t.Run("257", testdiv(257, func(n uint64) (uint64, uint64) { return n / 257, n % 257 })) t.Run("65535", testdiv(65535, func(n uint64) (uint64, uint64) { return n / 65535, n % 65535 })) t.Run("65536", testdiv(65536, func(n uint64) (uint64, uint64) { return n / 65536, n % 65536 })) t.Run("65537", testdiv(65537, func(n uint64) (uint64, uint64) { return n / 65537, n % 65537 })) t.Run("1<<32-1", testdiv(1<<32-1, func(n uint64) (uint64, uint64) { return n / (1<<32 - 1), n % (1<<32 - 1) })) t.Run("1<<32+1", testdiv(1<<32+1, func(n uint64) (uint64, uint64) { return n / (1<<32 + 1), n % (1<<32 + 1) })) t.Run("1<<64-1", testdiv(1<<64-1, func(n uint64) (uint64, uint64) { return n / (1<<64 - 1), n % (1<<64 - 1) })) } func BenchmarkDivconstU64(b *testing.B) { b.Run("3", func(b *testing.B) { x := uint64(123456789123456789) for i := 0; i < b.N; i++ { x += x << 4 u64res = uint64(x) / 3 } }) b.Run("5", func(b *testing.B) { x := uint64(123456789123456789) for i := 0; i < b.N; i++ { x += x << 4 u64res = uint64(x) / 5 } }) b.Run("37", func(b *testing.B) { x := uint64(123456789123456789) for i := 0; i < b.N; i++ { x += x << 4 u64res = uint64(x) / 37 } }) b.Run("1234567", func(b *testing.B) { x := uint64(123456789123456789) for i := 0; i < b.N; i++ { x += x << 4 u64res = uint64(x) / 1234567 } }) } func BenchmarkModconstU64(b *testing.B) { for i := 0; i < b.N; i++ { u64res = uint64(i) % 7 } } func BenchmarkDivisibleconstU64(b *testing.B) { for i := 0; i < b.N; i++ { boolres = uint64(i)%7 == 0 } } func BenchmarkDivisibleWDivconstU64(b *testing.B) { for i := 0; i < b.N; i++ { u64res = uint64(i) / 7 boolres = uint64(i)%7 == 0 } } var i32res int32 func BenchmarkDivconstI32(b *testing.B) { for i := 0; i < b.N; i++ { i32res = int32(i) / 7 } } func BenchmarkModconstI32(b *testing.B) { for i := 0; i < b.N; i++ { i32res = int32(i) % 7 } } func BenchmarkDivisiblePow2constI32(b *testing.B) { for i := 0; i < b.N; i++ { boolres = int32(i)%16 == 0 } } func BenchmarkDivisibleconstI32(b *testing.B) { for i := 0; i < b.N; i++ { boolres = int32(i)%7 == 0 } } func BenchmarkDivisibleWDivconstI32(b *testing.B) { for i := 0; i < b.N; i++ { i32res = int32(i) / 7 boolres = int32(i)%7 == 0 } } var u32res uint32 func BenchmarkDivconstU32(b *testing.B) { for i := 0; i < b.N; i++ { u32res = uint32(i) / 7 } } func BenchmarkModconstU32(b *testing.B) { for i := 0; i < b.N; i++ { u32res = uint32(i) % 7 } } func BenchmarkDivisibleconstU32(b *testing.B) { for i := 0; i < b.N; i++ { boolres = uint32(i)%7 == 0 } } func BenchmarkDivisibleWDivconstU32(b *testing.B) { for i := 0; i < b.N; i++ { u32res = uint32(i) / 7 boolres = uint32(i)%7 == 0 } } var i16res int16 func BenchmarkDivconstI16(b *testing.B) { for i := 0; i < b.N; i++ { i16res = int16(i) / 7 } } func BenchmarkModconstI16(b *testing.B) { for i := 0; i < b.N; i++ { i16res = int16(i) % 7 } } func BenchmarkDivisiblePow2constI16(b *testing.B) { for i := 0; i < b.N; i++ { boolres = int16(i)%16 == 0 } } func BenchmarkDivisibleconstI16(b *testing.B) { for i := 0; i < b.N; i++ { boolres = int16(i)%7 == 0 } } func BenchmarkDivisibleWDivconstI16(b *testing.B) { for i := 0; i < b.N; i++ { i16res = int16(i) / 7 boolres = int16(i)%7 == 0 } } var u16res uint16 func BenchmarkDivconstU16(b *testing.B) { for i := 0; i < b.N; i++ { u16res = uint16(i) / 7 } } func BenchmarkModconstU16(b *testing.B) { for i := 0; i < b.N; i++ { u16res = uint16(i) % 7 } } func BenchmarkDivisibleconstU16(b *testing.B) { for i := 0; i < b.N; i++ { boolres = uint16(i)%7 == 0 } } func BenchmarkDivisibleWDivconstU16(b *testing.B) { for i := 0; i < b.N; i++ { u16res = uint16(i) / 7 boolres = uint16(i)%7 == 0 } } var i8res int8 func BenchmarkDivconstI8(b *testing.B) { for i := 0; i < b.N; i++ { i8res = int8(i) / 7 } } func BenchmarkModconstI8(b *testing.B) { for i := 0; i < b.N; i++ { i8res = int8(i) % 7 } } func BenchmarkDivisiblePow2constI8(b *testing.B) { for i := 0; i < b.N; i++ { boolres = int8(i)%16 == 0 } } func BenchmarkDivisibleconstI8(b *testing.B) { for i := 0; i < b.N; i++ { boolres = int8(i)%7 == 0 } } func BenchmarkDivisibleWDivconstI8(b *testing.B) { for i := 0; i < b.N; i++ { i8res = int8(i) / 7 boolres = int8(i)%7 == 0 } } var u8res uint8 func BenchmarkDivconstU8(b *testing.B) { for i := 0; i < b.N; i++ { u8res = uint8(i) / 7 } } func BenchmarkModconstU8(b *testing.B) { for i := 0; i < b.N; i++ { u8res = uint8(i) % 7 } } func BenchmarkDivisibleconstU8(b *testing.B) { for i := 0; i < b.N; i++ { boolres = uint8(i)%7 == 0 } } func BenchmarkDivisibleWDivconstU8(b *testing.B) { for i := 0; i < b.N; i++ { u8res = uint8(i) / 7 boolres = uint8(i)%7 == 0 } } PK ! ���� � issue50182_test.gonu �[��� // Copyright 2021 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 test import ( "fmt" "sort" "testing" ) // Test that calling methods on generic types doesn't cause allocations. func genericSorted[T sort.Interface](data T) bool { n := data.Len() for i := n - 1; i > 0; i-- { if data.Less(i, i-1) { return false } } return true } func TestGenericSorted(t *testing.T) { var data = sort.IntSlice{-10, -5, 0, 1, 2, 3, 5, 7, 11, 100, 100, 100, 1000, 10000} f := func() { genericSorted(data) } if n := testing.AllocsPerRun(10, f); n > 0 { t.Errorf("got %f allocs, want 0", n) } } // Test that escape analysis correctly tracks escaping inside of methods // called on generic types. type fooer interface { foo() } type P struct { p *int q int } var esc []*int func (p P) foo() { esc = append(esc, p.p) // foo escapes the pointer from inside of p } func f[T fooer](t T) { t.foo() } func TestGenericEscape(t *testing.T) { for i := 0; i < 4; i++ { var x int = 77 + i var p P = P{p: &x} f(p) } for i, p := range esc { if got, want := *p, 77+i; got != want { panic(fmt.Sprintf("entry %d: got %d, want %d", i, got, want)) } } } PK ! s�g+ + reproduciblebuilds_test.gonu �[��� // Copyright 2017 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 test import ( "bytes" "internal/testenv" "os" "path/filepath" "testing" ) func TestReproducibleBuilds(t *testing.T) { tests := []string{ "issue20272.go", "issue27013.go", "issue30202.go", } testenv.MustHaveGoBuild(t) iters := 10 if testing.Short() { iters = 4 } t.Parallel() for _, test := range tests { test := test t.Run(test, func(t *testing.T) { t.Parallel() var want []byte tmp, err := os.CreateTemp("", "") if err != nil { t.Fatalf("temp file creation failed: %v", err) } defer os.Remove(tmp.Name()) defer tmp.Close() for i := 0; i < iters; i++ { // Note: use -c 2 to expose any nondeterminism which is the result // of the runtime scheduler. out, err := testenv.Command(t, testenv.GoToolPath(t), "tool", "compile", "-p=p", "-c", "2", "-o", tmp.Name(), filepath.Join("testdata", "reproducible", test)).CombinedOutput() if err != nil { t.Fatalf("failed to compile: %v\n%s", err, out) } obj, err := os.ReadFile(tmp.Name()) if err != nil { t.Fatalf("failed to read object file: %v", err) } if i == 0 { want = obj } else { if !bytes.Equal(want, obj) { t.Fatalf("builds produced different output after %d iters (%d bytes vs %d bytes)", i, len(want), len(obj)) } } } }) } } func TestIssue38068(t *testing.T) { testenv.MustHaveGoBuild(t) t.Parallel() // Compile a small package with and without the concurrent // backend, then check to make sure that the resulting archives // are identical. Note: this uses "go tool compile" instead of // "go build" since the latter will generate different build IDs // if it sees different command line flags. scenarios := []struct { tag string args string libpath string }{ {tag: "serial", args: "-c=1"}, {tag: "concurrent", args: "-c=2"}} tmpdir := t.TempDir() src := filepath.Join("testdata", "reproducible", "issue38068.go") for i := range scenarios { s := &scenarios[i] s.libpath = filepath.Join(tmpdir, s.tag+".a") // Note: use of "-p" required in order for DWARF to be generated. cmd := testenv.Command(t, testenv.GoToolPath(t), "tool", "compile", "-p=issue38068", "-buildid=", s.args, "-o", s.libpath, src) out, err := cmd.CombinedOutput() if err != nil { t.Fatalf("%v: %v:\n%s", cmd.Args, err, out) } } readBytes := func(fn string) []byte { payload, err := os.ReadFile(fn) if err != nil { t.Fatalf("failed to read executable '%s': %v", fn, err) } return payload } b1 := readBytes(scenarios[0].libpath) b2 := readBytes(scenarios[1].libpath) if !bytes.Equal(b1, b2) { t.Fatalf("concurrent and serial builds produced different output") } } PK ! e~�� � abiutilsaux_test.gonu �[��� // Copyright 2020 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 test // This file contains utility routines and harness infrastructure used // by the ABI tests in "abiutils_test.go". import ( "cmd/compile/internal/abi" "cmd/compile/internal/ir" "cmd/compile/internal/typecheck" "cmd/compile/internal/types" "cmd/internal/src" "fmt" "strings" "testing" "text/scanner" ) func mkParamResultField(t *types.Type, s *types.Sym, which ir.Class) *types.Field { field := types.NewField(src.NoXPos, s, t) n := ir.NewNameAt(src.NoXPos, s, t) n.Class = which field.Nname = n return field } // mkstruct is a helper routine to create a struct type with fields // of the types specified in 'fieldtypes'. func mkstruct(fieldtypes ...*types.Type) *types.Type { fields := make([]*types.Field, len(fieldtypes)) for k, t := range fieldtypes { if t == nil { panic("bad -- field has no type") } f := types.NewField(src.NoXPos, nil, t) fields[k] = f } s := types.NewStruct(fields) return s } func mkFuncType(rcvr *types.Type, ins []*types.Type, outs []*types.Type) *types.Type { q := typecheck.Lookup("?") inf := []*types.Field{} for _, it := range ins { inf = append(inf, mkParamResultField(it, q, ir.PPARAM)) } outf := []*types.Field{} for _, ot := range outs { outf = append(outf, mkParamResultField(ot, q, ir.PPARAMOUT)) } var rf *types.Field if rcvr != nil { rf = mkParamResultField(rcvr, q, ir.PPARAM) } return types.NewSignature(rf, inf, outf) } type expectedDump struct { dump string file string line int } func tokenize(src string) []string { var s scanner.Scanner s.Init(strings.NewReader(src)) res := []string{} for tok := s.Scan(); tok != scanner.EOF; tok = s.Scan() { res = append(res, s.TokenText()) } return res } func verifyParamResultOffset(t *testing.T, f *types.Field, r abi.ABIParamAssignment, which string, idx int) int { n := f.Nname.(*ir.Name) if n.FrameOffset() != int64(r.Offset()) { t.Errorf("%s %d: got offset %d wanted %d t=%v", which, idx, r.Offset(), n.Offset_, f.Type) return 1 } return 0 } func makeExpectedDump(e string) expectedDump { return expectedDump{dump: e} } func difftokens(atoks []string, etoks []string) string { if len(atoks) != len(etoks) { return fmt.Sprintf("expected %d tokens got %d", len(etoks), len(atoks)) } for i := 0; i < len(etoks); i++ { if etoks[i] == atoks[i] { continue } return fmt.Sprintf("diff at token %d: expected %q got %q", i, etoks[i], atoks[i]) } return "" } func nrtest(t *testing.T, ft *types.Type, expected int) { types.CalcSize(ft) got := configAMD64.NumParamRegs(ft) if got != expected { t.Errorf("]\nexpected num regs = %d, got %d, type %v", expected, got, ft) } } func abitest(t *testing.T, ft *types.Type, exp expectedDump) { types.CalcSize(ft) // Analyze with full set of registers. regRes := configAMD64.ABIAnalyze(ft, false) regResString := strings.TrimSpace(regRes.String()) // Check results. reason := difftokens(tokenize(regResString), tokenize(exp.dump)) if reason != "" { t.Errorf("\nexpected:\n%s\ngot:\n%s\nreason: %s", strings.TrimSpace(exp.dump), regResString, reason) } } PK ! ��s�N N iface_test.gonu �[��� // 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. package test import "testing" // Test to make sure we make copies of the values we // put in interfaces. var x int func TestEfaceConv1(t *testing.T) { a := 5 i := interface{}(a) a += 2 if got := i.(int); got != 5 { t.Errorf("wanted 5, got %d\n", got) } } func TestEfaceConv2(t *testing.T) { a := 5 sink = &a i := interface{}(a) a += 2 if got := i.(int); got != 5 { t.Errorf("wanted 5, got %d\n", got) } } func TestEfaceConv3(t *testing.T) { x = 5 if got := e2int3(x); got != 5 { t.Errorf("wanted 5, got %d\n", got) } } //go:noinline func e2int3(i interface{}) int { x = 7 return i.(int) } func TestEfaceConv4(t *testing.T) { a := 5 if got := e2int4(a, &a); got != 5 { t.Errorf("wanted 5, got %d\n", got) } } //go:noinline func e2int4(i interface{}, p *int) int { *p = 7 return i.(int) } type Int int var y Int type I interface { foo() } func (i Int) foo() { } func TestIfaceConv1(t *testing.T) { a := Int(5) i := interface{}(a) a += 2 if got := i.(Int); got != 5 { t.Errorf("wanted 5, got %d\n", int(got)) } } func TestIfaceConv2(t *testing.T) { a := Int(5) sink = &a i := interface{}(a) a += 2 if got := i.(Int); got != 5 { t.Errorf("wanted 5, got %d\n", int(got)) } } func TestIfaceConv3(t *testing.T) { y = 5 if got := i2Int3(y); got != 5 { t.Errorf("wanted 5, got %d\n", int(got)) } } //go:noinline func i2Int3(i I) Int { y = 7 return i.(Int) } func TestIfaceConv4(t *testing.T) { a := Int(5) if got := i2Int4(a, &a); got != 5 { t.Errorf("wanted 5, got %d\n", int(got)) } } //go:noinline func i2Int4(i I, p *Int) Int { *p = 7 return i.(Int) } func BenchmarkEfaceInteger(b *testing.B) { sum := 0 for i := 0; i < b.N; i++ { sum += i2int(i) } sink = sum } //go:noinline func i2int(i interface{}) int { return i.(int) } func BenchmarkTypeAssert(b *testing.B) { e := any(Int(0)) r := true for i := 0; i < b.N; i++ { _, ok := e.(I) if !ok { r = false } } sink = r } PK ! +X#�P P intrinsics_test.gonu �[��� // Copyright 2022 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 test import ( "math/bits" "testing" ) func TestBitLen64(t *testing.T) { for i := 0; i <= 64; i++ { got := bits.Len64(1 << i) want := i + 1 if want == 65 { want = 0 } if got != want { t.Errorf("Len64(1<<%d) = %d, want %d", i, got, want) } } } func TestBitLen32(t *testing.T) { for i := 0; i <= 32; i++ { got := bits.Len32(1 << i) want := i + 1 if want == 33 { want = 0 } if got != want { t.Errorf("Len32(1<<%d) = %d, want %d", i, got, want) } } } func TestBitLen16(t *testing.T) { for i := 0; i <= 16; i++ { got := bits.Len16(1 << i) want := i + 1 if want == 17 { want = 0 } if got != want { t.Errorf("Len16(1<<%d) = %d, want %d", i, got, want) } } } func TestBitLen8(t *testing.T) { for i := 0; i <= 8; i++ { got := bits.Len8(1 << i) want := i + 1 if want == 9 { want = 0 } if got != want { t.Errorf("Len8(1<<%d) = %d, want %d", i, got, want) } } } PK ! 9G�� � clobberdead_test.gonu �[��� // Copyright 2021 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 test import ( "internal/testenv" "os" "path/filepath" "testing" ) const helloSrc = ` package main import "fmt" func main() { fmt.Println("hello") } ` func TestClobberDead(t *testing.T) { // Test that clobberdead mode generates correct program. runHello(t, "-clobberdead") } func TestClobberDeadReg(t *testing.T) { // Test that clobberdeadreg mode generates correct program. runHello(t, "-clobberdeadreg") } func runHello(t *testing.T, flag string) { if testing.Short() { // This test rebuilds the runtime with a special flag, which // takes a while. t.Skip("skip in short mode") } testenv.MustHaveGoRun(t) t.Parallel() tmpdir := t.TempDir() src := filepath.Join(tmpdir, "x.go") err := os.WriteFile(src, []byte(helloSrc), 0644) if err != nil { t.Fatalf("write file failed: %v", err) } cmd := testenv.Command(t, testenv.GoToolPath(t), "run", "-gcflags=all="+flag, src) out, err := cmd.CombinedOutput() if err != nil { t.Fatalf("go run failed: %v\n%s", err, out) } if string(out) != "hello\n" { t.Errorf("wrong output: got %q, want %q", out, "hello\n") } } PK ! $ނM� � constFold_test.gonu �[��� // run // Code generated by gen/constFoldGen.go. DO NOT EDIT. package test import "testing" func TestConstFolduint64add(t *testing.T) { var x, y, r uint64 x = 0 y = 0 r = x + y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "+", r) } y = 1 r = x + y if r != 1 { t.Errorf("0 %s 1 = %d, want 1", "+", r) } y = 4294967296 r = x + y if r != 4294967296 { t.Errorf("0 %s 4294967296 = %d, want 4294967296", "+", r) } y = 18446744073709551615 r = x + y if r != 18446744073709551615 { t.Errorf("0 %s 18446744073709551615 = %d, want 18446744073709551615", "+", r) } x = 1 y = 0 r = x + y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "+", r) } y = 1 r = x + y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "+", r) } y = 4294967296 r = x + y if r != 4294967297 { t.Errorf("1 %s 4294967296 = %d, want 4294967297", "+", r) } y = 18446744073709551615 r = x + y if r != 0 { t.Errorf("1 %s 18446744073709551615 = %d, want 0", "+", r) } x = 4294967296 y = 0 r = x + y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", "+", r) } y = 1 r = x + y if r != 4294967297 { t.Errorf("4294967296 %s 1 = %d, want 4294967297", "+", r) } y = 4294967296 r = x + y if r != 8589934592 { t.Errorf("4294967296 %s 4294967296 = %d, want 8589934592", "+", r) } y = 18446744073709551615 r = x + y if r != 4294967295 { t.Errorf("4294967296 %s 18446744073709551615 = %d, want 4294967295", "+", r) } x = 18446744073709551615 y = 0 r = x + y if r != 18446744073709551615 { t.Errorf("18446744073709551615 %s 0 = %d, want 18446744073709551615", "+", r) } y = 1 r = x + y if r != 0 { t.Errorf("18446744073709551615 %s 1 = %d, want 0", "+", r) } y = 4294967296 r = x + y if r != 4294967295 { t.Errorf("18446744073709551615 %s 4294967296 = %d, want 4294967295", "+", r) } y = 18446744073709551615 r = x + y if r != 18446744073709551614 { t.Errorf("18446744073709551615 %s 18446744073709551615 = %d, want 18446744073709551614", "+", r) } } func TestConstFolduint64sub(t *testing.T) { var x, y, r uint64 x = 0 y = 0 r = x - y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "-", r) } y = 1 r = x - y if r != 18446744073709551615 { t.Errorf("0 %s 1 = %d, want 18446744073709551615", "-", r) } y = 4294967296 r = x - y if r != 18446744069414584320 { t.Errorf("0 %s 4294967296 = %d, want 18446744069414584320", "-", r) } y = 18446744073709551615 r = x - y if r != 1 { t.Errorf("0 %s 18446744073709551615 = %d, want 1", "-", r) } x = 1 y = 0 r = x - y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "-", r) } y = 1 r = x - y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", "-", r) } y = 4294967296 r = x - y if r != 18446744069414584321 { t.Errorf("1 %s 4294967296 = %d, want 18446744069414584321", "-", r) } y = 18446744073709551615 r = x - y if r != 2 { t.Errorf("1 %s 18446744073709551615 = %d, want 2", "-", r) } x = 4294967296 y = 0 r = x - y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", "-", r) } y = 1 r = x - y if r != 4294967295 { t.Errorf("4294967296 %s 1 = %d, want 4294967295", "-", r) } y = 4294967296 r = x - y if r != 0 { t.Errorf("4294967296 %s 4294967296 = %d, want 0", "-", r) } y = 18446744073709551615 r = x - y if r != 4294967297 { t.Errorf("4294967296 %s 18446744073709551615 = %d, want 4294967297", "-", r) } x = 18446744073709551615 y = 0 r = x - y if r != 18446744073709551615 { t.Errorf("18446744073709551615 %s 0 = %d, want 18446744073709551615", "-", r) } y = 1 r = x - y if r != 18446744073709551614 { t.Errorf("18446744073709551615 %s 1 = %d, want 18446744073709551614", "-", r) } y = 4294967296 r = x - y if r != 18446744069414584319 { t.Errorf("18446744073709551615 %s 4294967296 = %d, want 18446744069414584319", "-", r) } y = 18446744073709551615 r = x - y if r != 0 { t.Errorf("18446744073709551615 %s 18446744073709551615 = %d, want 0", "-", r) } } func TestConstFolduint64div(t *testing.T) { var x, y, r uint64 x = 0 y = 1 r = x / y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "/", r) } y = 4294967296 r = x / y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", "/", r) } y = 18446744073709551615 r = x / y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", "/", r) } x = 1 y = 1 r = x / y if r != 1 { t.Errorf("1 %s 1 = %d, want 1", "/", r) } y = 4294967296 r = x / y if r != 0 { t.Errorf("1 %s 4294967296 = %d, want 0", "/", r) } y = 18446744073709551615 r = x / y if r != 0 { t.Errorf("1 %s 18446744073709551615 = %d, want 0", "/", r) } x = 4294967296 y = 1 r = x / y if r != 4294967296 { t.Errorf("4294967296 %s 1 = %d, want 4294967296", "/", r) } y = 4294967296 r = x / y if r != 1 { t.Errorf("4294967296 %s 4294967296 = %d, want 1", "/", r) } y = 18446744073709551615 r = x / y if r != 0 { t.Errorf("4294967296 %s 18446744073709551615 = %d, want 0", "/", r) } x = 18446744073709551615 y = 1 r = x / y if r != 18446744073709551615 { t.Errorf("18446744073709551615 %s 1 = %d, want 18446744073709551615", "/", r) } y = 4294967296 r = x / y if r != 4294967295 { t.Errorf("18446744073709551615 %s 4294967296 = %d, want 4294967295", "/", r) } y = 18446744073709551615 r = x / y if r != 1 { t.Errorf("18446744073709551615 %s 18446744073709551615 = %d, want 1", "/", r) } } func TestConstFolduint64mul(t *testing.T) { var x, y, r uint64 x = 0 y = 0 r = x * y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "*", r) } y = 4294967296 r = x * y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", "*", r) } y = 18446744073709551615 r = x * y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", "*", r) } x = 1 y = 0 r = x * y if r != 0 { t.Errorf("1 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 1 { t.Errorf("1 %s 1 = %d, want 1", "*", r) } y = 4294967296 r = x * y if r != 4294967296 { t.Errorf("1 %s 4294967296 = %d, want 4294967296", "*", r) } y = 18446744073709551615 r = x * y if r != 18446744073709551615 { t.Errorf("1 %s 18446744073709551615 = %d, want 18446744073709551615", "*", r) } x = 4294967296 y = 0 r = x * y if r != 0 { t.Errorf("4294967296 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 4294967296 { t.Errorf("4294967296 %s 1 = %d, want 4294967296", "*", r) } y = 4294967296 r = x * y if r != 0 { t.Errorf("4294967296 %s 4294967296 = %d, want 0", "*", r) } y = 18446744073709551615 r = x * y if r != 18446744069414584320 { t.Errorf("4294967296 %s 18446744073709551615 = %d, want 18446744069414584320", "*", r) } x = 18446744073709551615 y = 0 r = x * y if r != 0 { t.Errorf("18446744073709551615 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 18446744073709551615 { t.Errorf("18446744073709551615 %s 1 = %d, want 18446744073709551615", "*", r) } y = 4294967296 r = x * y if r != 18446744069414584320 { t.Errorf("18446744073709551615 %s 4294967296 = %d, want 18446744069414584320", "*", r) } y = 18446744073709551615 r = x * y if r != 1 { t.Errorf("18446744073709551615 %s 18446744073709551615 = %d, want 1", "*", r) } } func TestConstFolduint64mod(t *testing.T) { var x, y, r uint64 x = 0 y = 1 r = x % y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "%", r) } y = 4294967296 r = x % y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", "%", r) } y = 18446744073709551615 r = x % y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", "%", r) } x = 1 y = 1 r = x % y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", "%", r) } y = 4294967296 r = x % y if r != 1 { t.Errorf("1 %s 4294967296 = %d, want 1", "%", r) } y = 18446744073709551615 r = x % y if r != 1 { t.Errorf("1 %s 18446744073709551615 = %d, want 1", "%", r) } x = 4294967296 y = 1 r = x % y if r != 0 { t.Errorf("4294967296 %s 1 = %d, want 0", "%", r) } y = 4294967296 r = x % y if r != 0 { t.Errorf("4294967296 %s 4294967296 = %d, want 0", "%", r) } y = 18446744073709551615 r = x % y if r != 4294967296 { t.Errorf("4294967296 %s 18446744073709551615 = %d, want 4294967296", "%", r) } x = 18446744073709551615 y = 1 r = x % y if r != 0 { t.Errorf("18446744073709551615 %s 1 = %d, want 0", "%", r) } y = 4294967296 r = x % y if r != 4294967295 { t.Errorf("18446744073709551615 %s 4294967296 = %d, want 4294967295", "%", r) } y = 18446744073709551615 r = x % y if r != 0 { t.Errorf("18446744073709551615 %s 18446744073709551615 = %d, want 0", "%", r) } } func TestConstFoldint64add(t *testing.T) { var x, y, r int64 x = -9223372036854775808 y = -9223372036854775808 r = x + y if r != 0 { t.Errorf("-9223372036854775808 %s -9223372036854775808 = %d, want 0", "+", r) } y = -9223372036854775807 r = x + y if r != 1 { t.Errorf("-9223372036854775808 %s -9223372036854775807 = %d, want 1", "+", r) } y = -4294967296 r = x + y if r != 9223372032559808512 { t.Errorf("-9223372036854775808 %s -4294967296 = %d, want 9223372032559808512", "+", r) } y = -1 r = x + y if r != 9223372036854775807 { t.Errorf("-9223372036854775808 %s -1 = %d, want 9223372036854775807", "+", r) } y = 0 r = x + y if r != -9223372036854775808 { t.Errorf("-9223372036854775808 %s 0 = %d, want -9223372036854775808", "+", r) } y = 1 r = x + y if r != -9223372036854775807 { t.Errorf("-9223372036854775808 %s 1 = %d, want -9223372036854775807", "+", r) } y = 4294967296 r = x + y if r != -9223372032559808512 { t.Errorf("-9223372036854775808 %s 4294967296 = %d, want -9223372032559808512", "+", r) } y = 9223372036854775806 r = x + y if r != -2 { t.Errorf("-9223372036854775808 %s 9223372036854775806 = %d, want -2", "+", r) } y = 9223372036854775807 r = x + y if r != -1 { t.Errorf("-9223372036854775808 %s 9223372036854775807 = %d, want -1", "+", r) } x = -9223372036854775807 y = -9223372036854775808 r = x + y if r != 1 { t.Errorf("-9223372036854775807 %s -9223372036854775808 = %d, want 1", "+", r) } y = -9223372036854775807 r = x + y if r != 2 { t.Errorf("-9223372036854775807 %s -9223372036854775807 = %d, want 2", "+", r) } y = -4294967296 r = x + y if r != 9223372032559808513 { t.Errorf("-9223372036854775807 %s -4294967296 = %d, want 9223372032559808513", "+", r) } y = -1 r = x + y if r != -9223372036854775808 { t.Errorf("-9223372036854775807 %s -1 = %d, want -9223372036854775808", "+", r) } y = 0 r = x + y if r != -9223372036854775807 { t.Errorf("-9223372036854775807 %s 0 = %d, want -9223372036854775807", "+", r) } y = 1 r = x + y if r != -9223372036854775806 { t.Errorf("-9223372036854775807 %s 1 = %d, want -9223372036854775806", "+", r) } y = 4294967296 r = x + y if r != -9223372032559808511 { t.Errorf("-9223372036854775807 %s 4294967296 = %d, want -9223372032559808511", "+", r) } y = 9223372036854775806 r = x + y if r != -1 { t.Errorf("-9223372036854775807 %s 9223372036854775806 = %d, want -1", "+", r) } y = 9223372036854775807 r = x + y if r != 0 { t.Errorf("-9223372036854775807 %s 9223372036854775807 = %d, want 0", "+", r) } x = -4294967296 y = -9223372036854775808 r = x + y if r != 9223372032559808512 { t.Errorf("-4294967296 %s -9223372036854775808 = %d, want 9223372032559808512", "+", r) } y = -9223372036854775807 r = x + y if r != 9223372032559808513 { t.Errorf("-4294967296 %s -9223372036854775807 = %d, want 9223372032559808513", "+", r) } y = -4294967296 r = x + y if r != -8589934592 { t.Errorf("-4294967296 %s -4294967296 = %d, want -8589934592", "+", r) } y = -1 r = x + y if r != -4294967297 { t.Errorf("-4294967296 %s -1 = %d, want -4294967297", "+", r) } y = 0 r = x + y if r != -4294967296 { t.Errorf("-4294967296 %s 0 = %d, want -4294967296", "+", r) } y = 1 r = x + y if r != -4294967295 { t.Errorf("-4294967296 %s 1 = %d, want -4294967295", "+", r) } y = 4294967296 r = x + y if r != 0 { t.Errorf("-4294967296 %s 4294967296 = %d, want 0", "+", r) } y = 9223372036854775806 r = x + y if r != 9223372032559808510 { t.Errorf("-4294967296 %s 9223372036854775806 = %d, want 9223372032559808510", "+", r) } y = 9223372036854775807 r = x + y if r != 9223372032559808511 { t.Errorf("-4294967296 %s 9223372036854775807 = %d, want 9223372032559808511", "+", r) } x = -1 y = -9223372036854775808 r = x + y if r != 9223372036854775807 { t.Errorf("-1 %s -9223372036854775808 = %d, want 9223372036854775807", "+", r) } y = -9223372036854775807 r = x + y if r != -9223372036854775808 { t.Errorf("-1 %s -9223372036854775807 = %d, want -9223372036854775808", "+", r) } y = -4294967296 r = x + y if r != -4294967297 { t.Errorf("-1 %s -4294967296 = %d, want -4294967297", "+", r) } y = -1 r = x + y if r != -2 { t.Errorf("-1 %s -1 = %d, want -2", "+", r) } y = 0 r = x + y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "+", r) } y = 1 r = x + y if r != 0 { t.Errorf("-1 %s 1 = %d, want 0", "+", r) } y = 4294967296 r = x + y if r != 4294967295 { t.Errorf("-1 %s 4294967296 = %d, want 4294967295", "+", r) } y = 9223372036854775806 r = x + y if r != 9223372036854775805 { t.Errorf("-1 %s 9223372036854775806 = %d, want 9223372036854775805", "+", r) } y = 9223372036854775807 r = x + y if r != 9223372036854775806 { t.Errorf("-1 %s 9223372036854775807 = %d, want 9223372036854775806", "+", r) } x = 0 y = -9223372036854775808 r = x + y if r != -9223372036854775808 { t.Errorf("0 %s -9223372036854775808 = %d, want -9223372036854775808", "+", r) } y = -9223372036854775807 r = x + y if r != -9223372036854775807 { t.Errorf("0 %s -9223372036854775807 = %d, want -9223372036854775807", "+", r) } y = -4294967296 r = x + y if r != -4294967296 { t.Errorf("0 %s -4294967296 = %d, want -4294967296", "+", r) } y = -1 r = x + y if r != -1 { t.Errorf("0 %s -1 = %d, want -1", "+", r) } y = 0 r = x + y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "+", r) } y = 1 r = x + y if r != 1 { t.Errorf("0 %s 1 = %d, want 1", "+", r) } y = 4294967296 r = x + y if r != 4294967296 { t.Errorf("0 %s 4294967296 = %d, want 4294967296", "+", r) } y = 9223372036854775806 r = x + y if r != 9223372036854775806 { t.Errorf("0 %s 9223372036854775806 = %d, want 9223372036854775806", "+", r) } y = 9223372036854775807 r = x + y if r != 9223372036854775807 { t.Errorf("0 %s 9223372036854775807 = %d, want 9223372036854775807", "+", r) } x = 1 y = -9223372036854775808 r = x + y if r != -9223372036854775807 { t.Errorf("1 %s -9223372036854775808 = %d, want -9223372036854775807", "+", r) } y = -9223372036854775807 r = x + y if r != -9223372036854775806 { t.Errorf("1 %s -9223372036854775807 = %d, want -9223372036854775806", "+", r) } y = -4294967296 r = x + y if r != -4294967295 { t.Errorf("1 %s -4294967296 = %d, want -4294967295", "+", r) } y = -1 r = x + y if r != 0 { t.Errorf("1 %s -1 = %d, want 0", "+", r) } y = 0 r = x + y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "+", r) } y = 1 r = x + y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "+", r) } y = 4294967296 r = x + y if r != 4294967297 { t.Errorf("1 %s 4294967296 = %d, want 4294967297", "+", r) } y = 9223372036854775806 r = x + y if r != 9223372036854775807 { t.Errorf("1 %s 9223372036854775806 = %d, want 9223372036854775807", "+", r) } y = 9223372036854775807 r = x + y if r != -9223372036854775808 { t.Errorf("1 %s 9223372036854775807 = %d, want -9223372036854775808", "+", r) } x = 4294967296 y = -9223372036854775808 r = x + y if r != -9223372032559808512 { t.Errorf("4294967296 %s -9223372036854775808 = %d, want -9223372032559808512", "+", r) } y = -9223372036854775807 r = x + y if r != -9223372032559808511 { t.Errorf("4294967296 %s -9223372036854775807 = %d, want -9223372032559808511", "+", r) } y = -4294967296 r = x + y if r != 0 { t.Errorf("4294967296 %s -4294967296 = %d, want 0", "+", r) } y = -1 r = x + y if r != 4294967295 { t.Errorf("4294967296 %s -1 = %d, want 4294967295", "+", r) } y = 0 r = x + y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", "+", r) } y = 1 r = x + y if r != 4294967297 { t.Errorf("4294967296 %s 1 = %d, want 4294967297", "+", r) } y = 4294967296 r = x + y if r != 8589934592 { t.Errorf("4294967296 %s 4294967296 = %d, want 8589934592", "+", r) } y = 9223372036854775806 r = x + y if r != -9223372032559808514 { t.Errorf("4294967296 %s 9223372036854775806 = %d, want -9223372032559808514", "+", r) } y = 9223372036854775807 r = x + y if r != -9223372032559808513 { t.Errorf("4294967296 %s 9223372036854775807 = %d, want -9223372032559808513", "+", r) } x = 9223372036854775806 y = -9223372036854775808 r = x + y if r != -2 { t.Errorf("9223372036854775806 %s -9223372036854775808 = %d, want -2", "+", r) } y = -9223372036854775807 r = x + y if r != -1 { t.Errorf("9223372036854775806 %s -9223372036854775807 = %d, want -1", "+", r) } y = -4294967296 r = x + y if r != 9223372032559808510 { t.Errorf("9223372036854775806 %s -4294967296 = %d, want 9223372032559808510", "+", r) } y = -1 r = x + y if r != 9223372036854775805 { t.Errorf("9223372036854775806 %s -1 = %d, want 9223372036854775805", "+", r) } y = 0 r = x + y if r != 9223372036854775806 { t.Errorf("9223372036854775806 %s 0 = %d, want 9223372036854775806", "+", r) } y = 1 r = x + y if r != 9223372036854775807 { t.Errorf("9223372036854775806 %s 1 = %d, want 9223372036854775807", "+", r) } y = 4294967296 r = x + y if r != -9223372032559808514 { t.Errorf("9223372036854775806 %s 4294967296 = %d, want -9223372032559808514", "+", r) } y = 9223372036854775806 r = x + y if r != -4 { t.Errorf("9223372036854775806 %s 9223372036854775806 = %d, want -4", "+", r) } y = 9223372036854775807 r = x + y if r != -3 { t.Errorf("9223372036854775806 %s 9223372036854775807 = %d, want -3", "+", r) } x = 9223372036854775807 y = -9223372036854775808 r = x + y if r != -1 { t.Errorf("9223372036854775807 %s -9223372036854775808 = %d, want -1", "+", r) } y = -9223372036854775807 r = x + y if r != 0 { t.Errorf("9223372036854775807 %s -9223372036854775807 = %d, want 0", "+", r) } y = -4294967296 r = x + y if r != 9223372032559808511 { t.Errorf("9223372036854775807 %s -4294967296 = %d, want 9223372032559808511", "+", r) } y = -1 r = x + y if r != 9223372036854775806 { t.Errorf("9223372036854775807 %s -1 = %d, want 9223372036854775806", "+", r) } y = 0 r = x + y if r != 9223372036854775807 { t.Errorf("9223372036854775807 %s 0 = %d, want 9223372036854775807", "+", r) } y = 1 r = x + y if r != -9223372036854775808 { t.Errorf("9223372036854775807 %s 1 = %d, want -9223372036854775808", "+", r) } y = 4294967296 r = x + y if r != -9223372032559808513 { t.Errorf("9223372036854775807 %s 4294967296 = %d, want -9223372032559808513", "+", r) } y = 9223372036854775806 r = x + y if r != -3 { t.Errorf("9223372036854775807 %s 9223372036854775806 = %d, want -3", "+", r) } y = 9223372036854775807 r = x + y if r != -2 { t.Errorf("9223372036854775807 %s 9223372036854775807 = %d, want -2", "+", r) } } func TestConstFoldint64sub(t *testing.T) { var x, y, r int64 x = -9223372036854775808 y = -9223372036854775808 r = x - y if r != 0 { t.Errorf("-9223372036854775808 %s -9223372036854775808 = %d, want 0", "-", r) } y = -9223372036854775807 r = x - y if r != -1 { t.Errorf("-9223372036854775808 %s -9223372036854775807 = %d, want -1", "-", r) } y = -4294967296 r = x - y if r != -9223372032559808512 { t.Errorf("-9223372036854775808 %s -4294967296 = %d, want -9223372032559808512", "-", r) } y = -1 r = x - y if r != -9223372036854775807 { t.Errorf("-9223372036854775808 %s -1 = %d, want -9223372036854775807", "-", r) } y = 0 r = x - y if r != -9223372036854775808 { t.Errorf("-9223372036854775808 %s 0 = %d, want -9223372036854775808", "-", r) } y = 1 r = x - y if r != 9223372036854775807 { t.Errorf("-9223372036854775808 %s 1 = %d, want 9223372036854775807", "-", r) } y = 4294967296 r = x - y if r != 9223372032559808512 { t.Errorf("-9223372036854775808 %s 4294967296 = %d, want 9223372032559808512", "-", r) } y = 9223372036854775806 r = x - y if r != 2 { t.Errorf("-9223372036854775808 %s 9223372036854775806 = %d, want 2", "-", r) } y = 9223372036854775807 r = x - y if r != 1 { t.Errorf("-9223372036854775808 %s 9223372036854775807 = %d, want 1", "-", r) } x = -9223372036854775807 y = -9223372036854775808 r = x - y if r != 1 { t.Errorf("-9223372036854775807 %s -9223372036854775808 = %d, want 1", "-", r) } y = -9223372036854775807 r = x - y if r != 0 { t.Errorf("-9223372036854775807 %s -9223372036854775807 = %d, want 0", "-", r) } y = -4294967296 r = x - y if r != -9223372032559808511 { t.Errorf("-9223372036854775807 %s -4294967296 = %d, want -9223372032559808511", "-", r) } y = -1 r = x - y if r != -9223372036854775806 { t.Errorf("-9223372036854775807 %s -1 = %d, want -9223372036854775806", "-", r) } y = 0 r = x - y if r != -9223372036854775807 { t.Errorf("-9223372036854775807 %s 0 = %d, want -9223372036854775807", "-", r) } y = 1 r = x - y if r != -9223372036854775808 { t.Errorf("-9223372036854775807 %s 1 = %d, want -9223372036854775808", "-", r) } y = 4294967296 r = x - y if r != 9223372032559808513 { t.Errorf("-9223372036854775807 %s 4294967296 = %d, want 9223372032559808513", "-", r) } y = 9223372036854775806 r = x - y if r != 3 { t.Errorf("-9223372036854775807 %s 9223372036854775806 = %d, want 3", "-", r) } y = 9223372036854775807 r = x - y if r != 2 { t.Errorf("-9223372036854775807 %s 9223372036854775807 = %d, want 2", "-", r) } x = -4294967296 y = -9223372036854775808 r = x - y if r != 9223372032559808512 { t.Errorf("-4294967296 %s -9223372036854775808 = %d, want 9223372032559808512", "-", r) } y = -9223372036854775807 r = x - y if r != 9223372032559808511 { t.Errorf("-4294967296 %s -9223372036854775807 = %d, want 9223372032559808511", "-", r) } y = -4294967296 r = x - y if r != 0 { t.Errorf("-4294967296 %s -4294967296 = %d, want 0", "-", r) } y = -1 r = x - y if r != -4294967295 { t.Errorf("-4294967296 %s -1 = %d, want -4294967295", "-", r) } y = 0 r = x - y if r != -4294967296 { t.Errorf("-4294967296 %s 0 = %d, want -4294967296", "-", r) } y = 1 r = x - y if r != -4294967297 { t.Errorf("-4294967296 %s 1 = %d, want -4294967297", "-", r) } y = 4294967296 r = x - y if r != -8589934592 { t.Errorf("-4294967296 %s 4294967296 = %d, want -8589934592", "-", r) } y = 9223372036854775806 r = x - y if r != 9223372032559808514 { t.Errorf("-4294967296 %s 9223372036854775806 = %d, want 9223372032559808514", "-", r) } y = 9223372036854775807 r = x - y if r != 9223372032559808513 { t.Errorf("-4294967296 %s 9223372036854775807 = %d, want 9223372032559808513", "-", r) } x = -1 y = -9223372036854775808 r = x - y if r != 9223372036854775807 { t.Errorf("-1 %s -9223372036854775808 = %d, want 9223372036854775807", "-", r) } y = -9223372036854775807 r = x - y if r != 9223372036854775806 { t.Errorf("-1 %s -9223372036854775807 = %d, want 9223372036854775806", "-", r) } y = -4294967296 r = x - y if r != 4294967295 { t.Errorf("-1 %s -4294967296 = %d, want 4294967295", "-", r) } y = -1 r = x - y if r != 0 { t.Errorf("-1 %s -1 = %d, want 0", "-", r) } y = 0 r = x - y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "-", r) } y = 1 r = x - y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "-", r) } y = 4294967296 r = x - y if r != -4294967297 { t.Errorf("-1 %s 4294967296 = %d, want -4294967297", "-", r) } y = 9223372036854775806 r = x - y if r != -9223372036854775807 { t.Errorf("-1 %s 9223372036854775806 = %d, want -9223372036854775807", "-", r) } y = 9223372036854775807 r = x - y if r != -9223372036854775808 { t.Errorf("-1 %s 9223372036854775807 = %d, want -9223372036854775808", "-", r) } x = 0 y = -9223372036854775808 r = x - y if r != -9223372036854775808 { t.Errorf("0 %s -9223372036854775808 = %d, want -9223372036854775808", "-", r) } y = -9223372036854775807 r = x - y if r != 9223372036854775807 { t.Errorf("0 %s -9223372036854775807 = %d, want 9223372036854775807", "-", r) } y = -4294967296 r = x - y if r != 4294967296 { t.Errorf("0 %s -4294967296 = %d, want 4294967296", "-", r) } y = -1 r = x - y if r != 1 { t.Errorf("0 %s -1 = %d, want 1", "-", r) } y = 0 r = x - y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "-", r) } y = 1 r = x - y if r != -1 { t.Errorf("0 %s 1 = %d, want -1", "-", r) } y = 4294967296 r = x - y if r != -4294967296 { t.Errorf("0 %s 4294967296 = %d, want -4294967296", "-", r) } y = 9223372036854775806 r = x - y if r != -9223372036854775806 { t.Errorf("0 %s 9223372036854775806 = %d, want -9223372036854775806", "-", r) } y = 9223372036854775807 r = x - y if r != -9223372036854775807 { t.Errorf("0 %s 9223372036854775807 = %d, want -9223372036854775807", "-", r) } x = 1 y = -9223372036854775808 r = x - y if r != -9223372036854775807 { t.Errorf("1 %s -9223372036854775808 = %d, want -9223372036854775807", "-", r) } y = -9223372036854775807 r = x - y if r != -9223372036854775808 { t.Errorf("1 %s -9223372036854775807 = %d, want -9223372036854775808", "-", r) } y = -4294967296 r = x - y if r != 4294967297 { t.Errorf("1 %s -4294967296 = %d, want 4294967297", "-", r) } y = -1 r = x - y if r != 2 { t.Errorf("1 %s -1 = %d, want 2", "-", r) } y = 0 r = x - y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "-", r) } y = 1 r = x - y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", "-", r) } y = 4294967296 r = x - y if r != -4294967295 { t.Errorf("1 %s 4294967296 = %d, want -4294967295", "-", r) } y = 9223372036854775806 r = x - y if r != -9223372036854775805 { t.Errorf("1 %s 9223372036854775806 = %d, want -9223372036854775805", "-", r) } y = 9223372036854775807 r = x - y if r != -9223372036854775806 { t.Errorf("1 %s 9223372036854775807 = %d, want -9223372036854775806", "-", r) } x = 4294967296 y = -9223372036854775808 r = x - y if r != -9223372032559808512 { t.Errorf("4294967296 %s -9223372036854775808 = %d, want -9223372032559808512", "-", r) } y = -9223372036854775807 r = x - y if r != -9223372032559808513 { t.Errorf("4294967296 %s -9223372036854775807 = %d, want -9223372032559808513", "-", r) } y = -4294967296 r = x - y if r != 8589934592 { t.Errorf("4294967296 %s -4294967296 = %d, want 8589934592", "-", r) } y = -1 r = x - y if r != 4294967297 { t.Errorf("4294967296 %s -1 = %d, want 4294967297", "-", r) } y = 0 r = x - y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", "-", r) } y = 1 r = x - y if r != 4294967295 { t.Errorf("4294967296 %s 1 = %d, want 4294967295", "-", r) } y = 4294967296 r = x - y if r != 0 { t.Errorf("4294967296 %s 4294967296 = %d, want 0", "-", r) } y = 9223372036854775806 r = x - y if r != -9223372032559808510 { t.Errorf("4294967296 %s 9223372036854775806 = %d, want -9223372032559808510", "-", r) } y = 9223372036854775807 r = x - y if r != -9223372032559808511 { t.Errorf("4294967296 %s 9223372036854775807 = %d, want -9223372032559808511", "-", r) } x = 9223372036854775806 y = -9223372036854775808 r = x - y if r != -2 { t.Errorf("9223372036854775806 %s -9223372036854775808 = %d, want -2", "-", r) } y = -9223372036854775807 r = x - y if r != -3 { t.Errorf("9223372036854775806 %s -9223372036854775807 = %d, want -3", "-", r) } y = -4294967296 r = x - y if r != -9223372032559808514 { t.Errorf("9223372036854775806 %s -4294967296 = %d, want -9223372032559808514", "-", r) } y = -1 r = x - y if r != 9223372036854775807 { t.Errorf("9223372036854775806 %s -1 = %d, want 9223372036854775807", "-", r) } y = 0 r = x - y if r != 9223372036854775806 { t.Errorf("9223372036854775806 %s 0 = %d, want 9223372036854775806", "-", r) } y = 1 r = x - y if r != 9223372036854775805 { t.Errorf("9223372036854775806 %s 1 = %d, want 9223372036854775805", "-", r) } y = 4294967296 r = x - y if r != 9223372032559808510 { t.Errorf("9223372036854775806 %s 4294967296 = %d, want 9223372032559808510", "-", r) } y = 9223372036854775806 r = x - y if r != 0 { t.Errorf("9223372036854775806 %s 9223372036854775806 = %d, want 0", "-", r) } y = 9223372036854775807 r = x - y if r != -1 { t.Errorf("9223372036854775806 %s 9223372036854775807 = %d, want -1", "-", r) } x = 9223372036854775807 y = -9223372036854775808 r = x - y if r != -1 { t.Errorf("9223372036854775807 %s -9223372036854775808 = %d, want -1", "-", r) } y = -9223372036854775807 r = x - y if r != -2 { t.Errorf("9223372036854775807 %s -9223372036854775807 = %d, want -2", "-", r) } y = -4294967296 r = x - y if r != -9223372032559808513 { t.Errorf("9223372036854775807 %s -4294967296 = %d, want -9223372032559808513", "-", r) } y = -1 r = x - y if r != -9223372036854775808 { t.Errorf("9223372036854775807 %s -1 = %d, want -9223372036854775808", "-", r) } y = 0 r = x - y if r != 9223372036854775807 { t.Errorf("9223372036854775807 %s 0 = %d, want 9223372036854775807", "-", r) } y = 1 r = x - y if r != 9223372036854775806 { t.Errorf("9223372036854775807 %s 1 = %d, want 9223372036854775806", "-", r) } y = 4294967296 r = x - y if r != 9223372032559808511 { t.Errorf("9223372036854775807 %s 4294967296 = %d, want 9223372032559808511", "-", r) } y = 9223372036854775806 r = x - y if r != 1 { t.Errorf("9223372036854775807 %s 9223372036854775806 = %d, want 1", "-", r) } y = 9223372036854775807 r = x - y if r != 0 { t.Errorf("9223372036854775807 %s 9223372036854775807 = %d, want 0", "-", r) } } func TestConstFoldint64div(t *testing.T) { var x, y, r int64 x = -9223372036854775808 y = -9223372036854775808 r = x / y if r != 1 { t.Errorf("-9223372036854775808 %s -9223372036854775808 = %d, want 1", "/", r) } y = -9223372036854775807 r = x / y if r != 1 { t.Errorf("-9223372036854775808 %s -9223372036854775807 = %d, want 1", "/", r) } y = -4294967296 r = x / y if r != 2147483648 { t.Errorf("-9223372036854775808 %s -4294967296 = %d, want 2147483648", "/", r) } y = -1 r = x / y if r != -9223372036854775808 { t.Errorf("-9223372036854775808 %s -1 = %d, want -9223372036854775808", "/", r) } y = 1 r = x / y if r != -9223372036854775808 { t.Errorf("-9223372036854775808 %s 1 = %d, want -9223372036854775808", "/", r) } y = 4294967296 r = x / y if r != -2147483648 { t.Errorf("-9223372036854775808 %s 4294967296 = %d, want -2147483648", "/", r) } y = 9223372036854775806 r = x / y if r != -1 { t.Errorf("-9223372036854775808 %s 9223372036854775806 = %d, want -1", "/", r) } y = 9223372036854775807 r = x / y if r != -1 { t.Errorf("-9223372036854775808 %s 9223372036854775807 = %d, want -1", "/", r) } x = -9223372036854775807 y = -9223372036854775808 r = x / y if r != 0 { t.Errorf("-9223372036854775807 %s -9223372036854775808 = %d, want 0", "/", r) } y = -9223372036854775807 r = x / y if r != 1 { t.Errorf("-9223372036854775807 %s -9223372036854775807 = %d, want 1", "/", r) } y = -4294967296 r = x / y if r != 2147483647 { t.Errorf("-9223372036854775807 %s -4294967296 = %d, want 2147483647", "/", r) } y = -1 r = x / y if r != 9223372036854775807 { t.Errorf("-9223372036854775807 %s -1 = %d, want 9223372036854775807", "/", r) } y = 1 r = x / y if r != -9223372036854775807 { t.Errorf("-9223372036854775807 %s 1 = %d, want -9223372036854775807", "/", r) } y = 4294967296 r = x / y if r != -2147483647 { t.Errorf("-9223372036854775807 %s 4294967296 = %d, want -2147483647", "/", r) } y = 9223372036854775806 r = x / y if r != -1 { t.Errorf("-9223372036854775807 %s 9223372036854775806 = %d, want -1", "/", r) } y = 9223372036854775807 r = x / y if r != -1 { t.Errorf("-9223372036854775807 %s 9223372036854775807 = %d, want -1", "/", r) } x = -4294967296 y = -9223372036854775808 r = x / y if r != 0 { t.Errorf("-4294967296 %s -9223372036854775808 = %d, want 0", "/", r) } y = -9223372036854775807 r = x / y if r != 0 { t.Errorf("-4294967296 %s -9223372036854775807 = %d, want 0", "/", r) } y = -4294967296 r = x / y if r != 1 { t.Errorf("-4294967296 %s -4294967296 = %d, want 1", "/", r) } y = -1 r = x / y if r != 4294967296 { t.Errorf("-4294967296 %s -1 = %d, want 4294967296", "/", r) } y = 1 r = x / y if r != -4294967296 { t.Errorf("-4294967296 %s 1 = %d, want -4294967296", "/", r) } y = 4294967296 r = x / y if r != -1 { t.Errorf("-4294967296 %s 4294967296 = %d, want -1", "/", r) } y = 9223372036854775806 r = x / y if r != 0 { t.Errorf("-4294967296 %s 9223372036854775806 = %d, want 0", "/", r) } y = 9223372036854775807 r = x / y if r != 0 { t.Errorf("-4294967296 %s 9223372036854775807 = %d, want 0", "/", r) } x = -1 y = -9223372036854775808 r = x / y if r != 0 { t.Errorf("-1 %s -9223372036854775808 = %d, want 0", "/", r) } y = -9223372036854775807 r = x / y if r != 0 { t.Errorf("-1 %s -9223372036854775807 = %d, want 0", "/", r) } y = -4294967296 r = x / y if r != 0 { t.Errorf("-1 %s -4294967296 = %d, want 0", "/", r) } y = -1 r = x / y if r != 1 { t.Errorf("-1 %s -1 = %d, want 1", "/", r) } y = 1 r = x / y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", "/", r) } y = 4294967296 r = x / y if r != 0 { t.Errorf("-1 %s 4294967296 = %d, want 0", "/", r) } y = 9223372036854775806 r = x / y if r != 0 { t.Errorf("-1 %s 9223372036854775806 = %d, want 0", "/", r) } y = 9223372036854775807 r = x / y if r != 0 { t.Errorf("-1 %s 9223372036854775807 = %d, want 0", "/", r) } x = 0 y = -9223372036854775808 r = x / y if r != 0 { t.Errorf("0 %s -9223372036854775808 = %d, want 0", "/", r) } y = -9223372036854775807 r = x / y if r != 0 { t.Errorf("0 %s -9223372036854775807 = %d, want 0", "/", r) } y = -4294967296 r = x / y if r != 0 { t.Errorf("0 %s -4294967296 = %d, want 0", "/", r) } y = -1 r = x / y if r != 0 { t.Errorf("0 %s -1 = %d, want 0", "/", r) } y = 1 r = x / y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "/", r) } y = 4294967296 r = x / y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", "/", r) } y = 9223372036854775806 r = x / y if r != 0 { t.Errorf("0 %s 9223372036854775806 = %d, want 0", "/", r) } y = 9223372036854775807 r = x / y if r != 0 { t.Errorf("0 %s 9223372036854775807 = %d, want 0", "/", r) } x = 1 y = -9223372036854775808 r = x / y if r != 0 { t.Errorf("1 %s -9223372036854775808 = %d, want 0", "/", r) } y = -9223372036854775807 r = x / y if r != 0 { t.Errorf("1 %s -9223372036854775807 = %d, want 0", "/", r) } y = -4294967296 r = x / y if r != 0 { t.Errorf("1 %s -4294967296 = %d, want 0", "/", r) } y = -1 r = x / y if r != -1 { t.Errorf("1 %s -1 = %d, want -1", "/", r) } y = 1 r = x / y if r != 1 { t.Errorf("1 %s 1 = %d, want 1", "/", r) } y = 4294967296 r = x / y if r != 0 { t.Errorf("1 %s 4294967296 = %d, want 0", "/", r) } y = 9223372036854775806 r = x / y if r != 0 { t.Errorf("1 %s 9223372036854775806 = %d, want 0", "/", r) } y = 9223372036854775807 r = x / y if r != 0 { t.Errorf("1 %s 9223372036854775807 = %d, want 0", "/", r) } x = 4294967296 y = -9223372036854775808 r = x / y if r != 0 { t.Errorf("4294967296 %s -9223372036854775808 = %d, want 0", "/", r) } y = -9223372036854775807 r = x / y if r != 0 { t.Errorf("4294967296 %s -9223372036854775807 = %d, want 0", "/", r) } y = -4294967296 r = x / y if r != -1 { t.Errorf("4294967296 %s -4294967296 = %d, want -1", "/", r) } y = -1 r = x / y if r != -4294967296 { t.Errorf("4294967296 %s -1 = %d, want -4294967296", "/", r) } y = 1 r = x / y if r != 4294967296 { t.Errorf("4294967296 %s 1 = %d, want 4294967296", "/", r) } y = 4294967296 r = x / y if r != 1 { t.Errorf("4294967296 %s 4294967296 = %d, want 1", "/", r) } y = 9223372036854775806 r = x / y if r != 0 { t.Errorf("4294967296 %s 9223372036854775806 = %d, want 0", "/", r) } y = 9223372036854775807 r = x / y if r != 0 { t.Errorf("4294967296 %s 9223372036854775807 = %d, want 0", "/", r) } x = 9223372036854775806 y = -9223372036854775808 r = x / y if r != 0 { t.Errorf("9223372036854775806 %s -9223372036854775808 = %d, want 0", "/", r) } y = -9223372036854775807 r = x / y if r != 0 { t.Errorf("9223372036854775806 %s -9223372036854775807 = %d, want 0", "/", r) } y = -4294967296 r = x / y if r != -2147483647 { t.Errorf("9223372036854775806 %s -4294967296 = %d, want -2147483647", "/", r) } y = -1 r = x / y if r != -9223372036854775806 { t.Errorf("9223372036854775806 %s -1 = %d, want -9223372036854775806", "/", r) } y = 1 r = x / y if r != 9223372036854775806 { t.Errorf("9223372036854775806 %s 1 = %d, want 9223372036854775806", "/", r) } y = 4294967296 r = x / y if r != 2147483647 { t.Errorf("9223372036854775806 %s 4294967296 = %d, want 2147483647", "/", r) } y = 9223372036854775806 r = x / y if r != 1 { t.Errorf("9223372036854775806 %s 9223372036854775806 = %d, want 1", "/", r) } y = 9223372036854775807 r = x / y if r != 0 { t.Errorf("9223372036854775806 %s 9223372036854775807 = %d, want 0", "/", r) } x = 9223372036854775807 y = -9223372036854775808 r = x / y if r != 0 { t.Errorf("9223372036854775807 %s -9223372036854775808 = %d, want 0", "/", r) } y = -9223372036854775807 r = x / y if r != -1 { t.Errorf("9223372036854775807 %s -9223372036854775807 = %d, want -1", "/", r) } y = -4294967296 r = x / y if r != -2147483647 { t.Errorf("9223372036854775807 %s -4294967296 = %d, want -2147483647", "/", r) } y = -1 r = x / y if r != -9223372036854775807 { t.Errorf("9223372036854775807 %s -1 = %d, want -9223372036854775807", "/", r) } y = 1 r = x / y if r != 9223372036854775807 { t.Errorf("9223372036854775807 %s 1 = %d, want 9223372036854775807", "/", r) } y = 4294967296 r = x / y if r != 2147483647 { t.Errorf("9223372036854775807 %s 4294967296 = %d, want 2147483647", "/", r) } y = 9223372036854775806 r = x / y if r != 1 { t.Errorf("9223372036854775807 %s 9223372036854775806 = %d, want 1", "/", r) } y = 9223372036854775807 r = x / y if r != 1 { t.Errorf("9223372036854775807 %s 9223372036854775807 = %d, want 1", "/", r) } } func TestConstFoldint64mul(t *testing.T) { var x, y, r int64 x = -9223372036854775808 y = -9223372036854775808 r = x * y if r != 0 { t.Errorf("-9223372036854775808 %s -9223372036854775808 = %d, want 0", "*", r) } y = -9223372036854775807 r = x * y if r != -9223372036854775808 { t.Errorf("-9223372036854775808 %s -9223372036854775807 = %d, want -9223372036854775808", "*", r) } y = -4294967296 r = x * y if r != 0 { t.Errorf("-9223372036854775808 %s -4294967296 = %d, want 0", "*", r) } y = -1 r = x * y if r != -9223372036854775808 { t.Errorf("-9223372036854775808 %s -1 = %d, want -9223372036854775808", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("-9223372036854775808 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != -9223372036854775808 { t.Errorf("-9223372036854775808 %s 1 = %d, want -9223372036854775808", "*", r) } y = 4294967296 r = x * y if r != 0 { t.Errorf("-9223372036854775808 %s 4294967296 = %d, want 0", "*", r) } y = 9223372036854775806 r = x * y if r != 0 { t.Errorf("-9223372036854775808 %s 9223372036854775806 = %d, want 0", "*", r) } y = 9223372036854775807 r = x * y if r != -9223372036854775808 { t.Errorf("-9223372036854775808 %s 9223372036854775807 = %d, want -9223372036854775808", "*", r) } x = -9223372036854775807 y = -9223372036854775808 r = x * y if r != -9223372036854775808 { t.Errorf("-9223372036854775807 %s -9223372036854775808 = %d, want -9223372036854775808", "*", r) } y = -9223372036854775807 r = x * y if r != 1 { t.Errorf("-9223372036854775807 %s -9223372036854775807 = %d, want 1", "*", r) } y = -4294967296 r = x * y if r != -4294967296 { t.Errorf("-9223372036854775807 %s -4294967296 = %d, want -4294967296", "*", r) } y = -1 r = x * y if r != 9223372036854775807 { t.Errorf("-9223372036854775807 %s -1 = %d, want 9223372036854775807", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("-9223372036854775807 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != -9223372036854775807 { t.Errorf("-9223372036854775807 %s 1 = %d, want -9223372036854775807", "*", r) } y = 4294967296 r = x * y if r != 4294967296 { t.Errorf("-9223372036854775807 %s 4294967296 = %d, want 4294967296", "*", r) } y = 9223372036854775806 r = x * y if r != 9223372036854775806 { t.Errorf("-9223372036854775807 %s 9223372036854775806 = %d, want 9223372036854775806", "*", r) } y = 9223372036854775807 r = x * y if r != -1 { t.Errorf("-9223372036854775807 %s 9223372036854775807 = %d, want -1", "*", r) } x = -4294967296 y = -9223372036854775808 r = x * y if r != 0 { t.Errorf("-4294967296 %s -9223372036854775808 = %d, want 0", "*", r) } y = -9223372036854775807 r = x * y if r != -4294967296 { t.Errorf("-4294967296 %s -9223372036854775807 = %d, want -4294967296", "*", r) } y = -4294967296 r = x * y if r != 0 { t.Errorf("-4294967296 %s -4294967296 = %d, want 0", "*", r) } y = -1 r = x * y if r != 4294967296 { t.Errorf("-4294967296 %s -1 = %d, want 4294967296", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("-4294967296 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != -4294967296 { t.Errorf("-4294967296 %s 1 = %d, want -4294967296", "*", r) } y = 4294967296 r = x * y if r != 0 { t.Errorf("-4294967296 %s 4294967296 = %d, want 0", "*", r) } y = 9223372036854775806 r = x * y if r != 8589934592 { t.Errorf("-4294967296 %s 9223372036854775806 = %d, want 8589934592", "*", r) } y = 9223372036854775807 r = x * y if r != 4294967296 { t.Errorf("-4294967296 %s 9223372036854775807 = %d, want 4294967296", "*", r) } x = -1 y = -9223372036854775808 r = x * y if r != -9223372036854775808 { t.Errorf("-1 %s -9223372036854775808 = %d, want -9223372036854775808", "*", r) } y = -9223372036854775807 r = x * y if r != 9223372036854775807 { t.Errorf("-1 %s -9223372036854775807 = %d, want 9223372036854775807", "*", r) } y = -4294967296 r = x * y if r != 4294967296 { t.Errorf("-1 %s -4294967296 = %d, want 4294967296", "*", r) } y = -1 r = x * y if r != 1 { t.Errorf("-1 %s -1 = %d, want 1", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("-1 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", "*", r) } y = 4294967296 r = x * y if r != -4294967296 { t.Errorf("-1 %s 4294967296 = %d, want -4294967296", "*", r) } y = 9223372036854775806 r = x * y if r != -9223372036854775806 { t.Errorf("-1 %s 9223372036854775806 = %d, want -9223372036854775806", "*", r) } y = 9223372036854775807 r = x * y if r != -9223372036854775807 { t.Errorf("-1 %s 9223372036854775807 = %d, want -9223372036854775807", "*", r) } x = 0 y = -9223372036854775808 r = x * y if r != 0 { t.Errorf("0 %s -9223372036854775808 = %d, want 0", "*", r) } y = -9223372036854775807 r = x * y if r != 0 { t.Errorf("0 %s -9223372036854775807 = %d, want 0", "*", r) } y = -4294967296 r = x * y if r != 0 { t.Errorf("0 %s -4294967296 = %d, want 0", "*", r) } y = -1 r = x * y if r != 0 { t.Errorf("0 %s -1 = %d, want 0", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "*", r) } y = 4294967296 r = x * y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", "*", r) } y = 9223372036854775806 r = x * y if r != 0 { t.Errorf("0 %s 9223372036854775806 = %d, want 0", "*", r) } y = 9223372036854775807 r = x * y if r != 0 { t.Errorf("0 %s 9223372036854775807 = %d, want 0", "*", r) } x = 1 y = -9223372036854775808 r = x * y if r != -9223372036854775808 { t.Errorf("1 %s -9223372036854775808 = %d, want -9223372036854775808", "*", r) } y = -9223372036854775807 r = x * y if r != -9223372036854775807 { t.Errorf("1 %s -9223372036854775807 = %d, want -9223372036854775807", "*", r) } y = -4294967296 r = x * y if r != -4294967296 { t.Errorf("1 %s -4294967296 = %d, want -4294967296", "*", r) } y = -1 r = x * y if r != -1 { t.Errorf("1 %s -1 = %d, want -1", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("1 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 1 { t.Errorf("1 %s 1 = %d, want 1", "*", r) } y = 4294967296 r = x * y if r != 4294967296 { t.Errorf("1 %s 4294967296 = %d, want 4294967296", "*", r) } y = 9223372036854775806 r = x * y if r != 9223372036854775806 { t.Errorf("1 %s 9223372036854775806 = %d, want 9223372036854775806", "*", r) } y = 9223372036854775807 r = x * y if r != 9223372036854775807 { t.Errorf("1 %s 9223372036854775807 = %d, want 9223372036854775807", "*", r) } x = 4294967296 y = -9223372036854775808 r = x * y if r != 0 { t.Errorf("4294967296 %s -9223372036854775808 = %d, want 0", "*", r) } y = -9223372036854775807 r = x * y if r != 4294967296 { t.Errorf("4294967296 %s -9223372036854775807 = %d, want 4294967296", "*", r) } y = -4294967296 r = x * y if r != 0 { t.Errorf("4294967296 %s -4294967296 = %d, want 0", "*", r) } y = -1 r = x * y if r != -4294967296 { t.Errorf("4294967296 %s -1 = %d, want -4294967296", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("4294967296 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 4294967296 { t.Errorf("4294967296 %s 1 = %d, want 4294967296", "*", r) } y = 4294967296 r = x * y if r != 0 { t.Errorf("4294967296 %s 4294967296 = %d, want 0", "*", r) } y = 9223372036854775806 r = x * y if r != -8589934592 { t.Errorf("4294967296 %s 9223372036854775806 = %d, want -8589934592", "*", r) } y = 9223372036854775807 r = x * y if r != -4294967296 { t.Errorf("4294967296 %s 9223372036854775807 = %d, want -4294967296", "*", r) } x = 9223372036854775806 y = -9223372036854775808 r = x * y if r != 0 { t.Errorf("9223372036854775806 %s -9223372036854775808 = %d, want 0", "*", r) } y = -9223372036854775807 r = x * y if r != 9223372036854775806 { t.Errorf("9223372036854775806 %s -9223372036854775807 = %d, want 9223372036854775806", "*", r) } y = -4294967296 r = x * y if r != 8589934592 { t.Errorf("9223372036854775806 %s -4294967296 = %d, want 8589934592", "*", r) } y = -1 r = x * y if r != -9223372036854775806 { t.Errorf("9223372036854775806 %s -1 = %d, want -9223372036854775806", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("9223372036854775806 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 9223372036854775806 { t.Errorf("9223372036854775806 %s 1 = %d, want 9223372036854775806", "*", r) } y = 4294967296 r = x * y if r != -8589934592 { t.Errorf("9223372036854775806 %s 4294967296 = %d, want -8589934592", "*", r) } y = 9223372036854775806 r = x * y if r != 4 { t.Errorf("9223372036854775806 %s 9223372036854775806 = %d, want 4", "*", r) } y = 9223372036854775807 r = x * y if r != -9223372036854775806 { t.Errorf("9223372036854775806 %s 9223372036854775807 = %d, want -9223372036854775806", "*", r) } x = 9223372036854775807 y = -9223372036854775808 r = x * y if r != -9223372036854775808 { t.Errorf("9223372036854775807 %s -9223372036854775808 = %d, want -9223372036854775808", "*", r) } y = -9223372036854775807 r = x * y if r != -1 { t.Errorf("9223372036854775807 %s -9223372036854775807 = %d, want -1", "*", r) } y = -4294967296 r = x * y if r != 4294967296 { t.Errorf("9223372036854775807 %s -4294967296 = %d, want 4294967296", "*", r) } y = -1 r = x * y if r != -9223372036854775807 { t.Errorf("9223372036854775807 %s -1 = %d, want -9223372036854775807", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("9223372036854775807 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 9223372036854775807 { t.Errorf("9223372036854775807 %s 1 = %d, want 9223372036854775807", "*", r) } y = 4294967296 r = x * y if r != -4294967296 { t.Errorf("9223372036854775807 %s 4294967296 = %d, want -4294967296", "*", r) } y = 9223372036854775806 r = x * y if r != -9223372036854775806 { t.Errorf("9223372036854775807 %s 9223372036854775806 = %d, want -9223372036854775806", "*", r) } y = 9223372036854775807 r = x * y if r != 1 { t.Errorf("9223372036854775807 %s 9223372036854775807 = %d, want 1", "*", r) } } func TestConstFoldint64mod(t *testing.T) { var x, y, r int64 x = -9223372036854775808 y = -9223372036854775808 r = x % y if r != 0 { t.Errorf("-9223372036854775808 %s -9223372036854775808 = %d, want 0", "%", r) } y = -9223372036854775807 r = x % y if r != -1 { t.Errorf("-9223372036854775808 %s -9223372036854775807 = %d, want -1", "%", r) } y = -4294967296 r = x % y if r != 0 { t.Errorf("-9223372036854775808 %s -4294967296 = %d, want 0", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("-9223372036854775808 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("-9223372036854775808 %s 1 = %d, want 0", "%", r) } y = 4294967296 r = x % y if r != 0 { t.Errorf("-9223372036854775808 %s 4294967296 = %d, want 0", "%", r) } y = 9223372036854775806 r = x % y if r != -2 { t.Errorf("-9223372036854775808 %s 9223372036854775806 = %d, want -2", "%", r) } y = 9223372036854775807 r = x % y if r != -1 { t.Errorf("-9223372036854775808 %s 9223372036854775807 = %d, want -1", "%", r) } x = -9223372036854775807 y = -9223372036854775808 r = x % y if r != -9223372036854775807 { t.Errorf("-9223372036854775807 %s -9223372036854775808 = %d, want -9223372036854775807", "%", r) } y = -9223372036854775807 r = x % y if r != 0 { t.Errorf("-9223372036854775807 %s -9223372036854775807 = %d, want 0", "%", r) } y = -4294967296 r = x % y if r != -4294967295 { t.Errorf("-9223372036854775807 %s -4294967296 = %d, want -4294967295", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("-9223372036854775807 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("-9223372036854775807 %s 1 = %d, want 0", "%", r) } y = 4294967296 r = x % y if r != -4294967295 { t.Errorf("-9223372036854775807 %s 4294967296 = %d, want -4294967295", "%", r) } y = 9223372036854775806 r = x % y if r != -1 { t.Errorf("-9223372036854775807 %s 9223372036854775806 = %d, want -1", "%", r) } y = 9223372036854775807 r = x % y if r != 0 { t.Errorf("-9223372036854775807 %s 9223372036854775807 = %d, want 0", "%", r) } x = -4294967296 y = -9223372036854775808 r = x % y if r != -4294967296 { t.Errorf("-4294967296 %s -9223372036854775808 = %d, want -4294967296", "%", r) } y = -9223372036854775807 r = x % y if r != -4294967296 { t.Errorf("-4294967296 %s -9223372036854775807 = %d, want -4294967296", "%", r) } y = -4294967296 r = x % y if r != 0 { t.Errorf("-4294967296 %s -4294967296 = %d, want 0", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("-4294967296 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("-4294967296 %s 1 = %d, want 0", "%", r) } y = 4294967296 r = x % y if r != 0 { t.Errorf("-4294967296 %s 4294967296 = %d, want 0", "%", r) } y = 9223372036854775806 r = x % y if r != -4294967296 { t.Errorf("-4294967296 %s 9223372036854775806 = %d, want -4294967296", "%", r) } y = 9223372036854775807 r = x % y if r != -4294967296 { t.Errorf("-4294967296 %s 9223372036854775807 = %d, want -4294967296", "%", r) } x = -1 y = -9223372036854775808 r = x % y if r != -1 { t.Errorf("-1 %s -9223372036854775808 = %d, want -1", "%", r) } y = -9223372036854775807 r = x % y if r != -1 { t.Errorf("-1 %s -9223372036854775807 = %d, want -1", "%", r) } y = -4294967296 r = x % y if r != -1 { t.Errorf("-1 %s -4294967296 = %d, want -1", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("-1 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("-1 %s 1 = %d, want 0", "%", r) } y = 4294967296 r = x % y if r != -1 { t.Errorf("-1 %s 4294967296 = %d, want -1", "%", r) } y = 9223372036854775806 r = x % y if r != -1 { t.Errorf("-1 %s 9223372036854775806 = %d, want -1", "%", r) } y = 9223372036854775807 r = x % y if r != -1 { t.Errorf("-1 %s 9223372036854775807 = %d, want -1", "%", r) } x = 0 y = -9223372036854775808 r = x % y if r != 0 { t.Errorf("0 %s -9223372036854775808 = %d, want 0", "%", r) } y = -9223372036854775807 r = x % y if r != 0 { t.Errorf("0 %s -9223372036854775807 = %d, want 0", "%", r) } y = -4294967296 r = x % y if r != 0 { t.Errorf("0 %s -4294967296 = %d, want 0", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("0 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "%", r) } y = 4294967296 r = x % y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", "%", r) } y = 9223372036854775806 r = x % y if r != 0 { t.Errorf("0 %s 9223372036854775806 = %d, want 0", "%", r) } y = 9223372036854775807 r = x % y if r != 0 { t.Errorf("0 %s 9223372036854775807 = %d, want 0", "%", r) } x = 1 y = -9223372036854775808 r = x % y if r != 1 { t.Errorf("1 %s -9223372036854775808 = %d, want 1", "%", r) } y = -9223372036854775807 r = x % y if r != 1 { t.Errorf("1 %s -9223372036854775807 = %d, want 1", "%", r) } y = -4294967296 r = x % y if r != 1 { t.Errorf("1 %s -4294967296 = %d, want 1", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("1 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", "%", r) } y = 4294967296 r = x % y if r != 1 { t.Errorf("1 %s 4294967296 = %d, want 1", "%", r) } y = 9223372036854775806 r = x % y if r != 1 { t.Errorf("1 %s 9223372036854775806 = %d, want 1", "%", r) } y = 9223372036854775807 r = x % y if r != 1 { t.Errorf("1 %s 9223372036854775807 = %d, want 1", "%", r) } x = 4294967296 y = -9223372036854775808 r = x % y if r != 4294967296 { t.Errorf("4294967296 %s -9223372036854775808 = %d, want 4294967296", "%", r) } y = -9223372036854775807 r = x % y if r != 4294967296 { t.Errorf("4294967296 %s -9223372036854775807 = %d, want 4294967296", "%", r) } y = -4294967296 r = x % y if r != 0 { t.Errorf("4294967296 %s -4294967296 = %d, want 0", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("4294967296 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("4294967296 %s 1 = %d, want 0", "%", r) } y = 4294967296 r = x % y if r != 0 { t.Errorf("4294967296 %s 4294967296 = %d, want 0", "%", r) } y = 9223372036854775806 r = x % y if r != 4294967296 { t.Errorf("4294967296 %s 9223372036854775806 = %d, want 4294967296", "%", r) } y = 9223372036854775807 r = x % y if r != 4294967296 { t.Errorf("4294967296 %s 9223372036854775807 = %d, want 4294967296", "%", r) } x = 9223372036854775806 y = -9223372036854775808 r = x % y if r != 9223372036854775806 { t.Errorf("9223372036854775806 %s -9223372036854775808 = %d, want 9223372036854775806", "%", r) } y = -9223372036854775807 r = x % y if r != 9223372036854775806 { t.Errorf("9223372036854775806 %s -9223372036854775807 = %d, want 9223372036854775806", "%", r) } y = -4294967296 r = x % y if r != 4294967294 { t.Errorf("9223372036854775806 %s -4294967296 = %d, want 4294967294", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("9223372036854775806 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("9223372036854775806 %s 1 = %d, want 0", "%", r) } y = 4294967296 r = x % y if r != 4294967294 { t.Errorf("9223372036854775806 %s 4294967296 = %d, want 4294967294", "%", r) } y = 9223372036854775806 r = x % y if r != 0 { t.Errorf("9223372036854775806 %s 9223372036854775806 = %d, want 0", "%", r) } y = 9223372036854775807 r = x % y if r != 9223372036854775806 { t.Errorf("9223372036854775806 %s 9223372036854775807 = %d, want 9223372036854775806", "%", r) } x = 9223372036854775807 y = -9223372036854775808 r = x % y if r != 9223372036854775807 { t.Errorf("9223372036854775807 %s -9223372036854775808 = %d, want 9223372036854775807", "%", r) } y = -9223372036854775807 r = x % y if r != 0 { t.Errorf("9223372036854775807 %s -9223372036854775807 = %d, want 0", "%", r) } y = -4294967296 r = x % y if r != 4294967295 { t.Errorf("9223372036854775807 %s -4294967296 = %d, want 4294967295", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("9223372036854775807 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("9223372036854775807 %s 1 = %d, want 0", "%", r) } y = 4294967296 r = x % y if r != 4294967295 { t.Errorf("9223372036854775807 %s 4294967296 = %d, want 4294967295", "%", r) } y = 9223372036854775806 r = x % y if r != 1 { t.Errorf("9223372036854775807 %s 9223372036854775806 = %d, want 1", "%", r) } y = 9223372036854775807 r = x % y if r != 0 { t.Errorf("9223372036854775807 %s 9223372036854775807 = %d, want 0", "%", r) } } func TestConstFolduint32add(t *testing.T) { var x, y, r uint32 x = 0 y = 0 r = x + y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "+", r) } y = 1 r = x + y if r != 1 { t.Errorf("0 %s 1 = %d, want 1", "+", r) } y = 4294967295 r = x + y if r != 4294967295 { t.Errorf("0 %s 4294967295 = %d, want 4294967295", "+", r) } x = 1 y = 0 r = x + y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "+", r) } y = 1 r = x + y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "+", r) } y = 4294967295 r = x + y if r != 0 { t.Errorf("1 %s 4294967295 = %d, want 0", "+", r) } x = 4294967295 y = 0 r = x + y if r != 4294967295 { t.Errorf("4294967295 %s 0 = %d, want 4294967295", "+", r) } y = 1 r = x + y if r != 0 { t.Errorf("4294967295 %s 1 = %d, want 0", "+", r) } y = 4294967295 r = x + y if r != 4294967294 { t.Errorf("4294967295 %s 4294967295 = %d, want 4294967294", "+", r) } } func TestConstFolduint32sub(t *testing.T) { var x, y, r uint32 x = 0 y = 0 r = x - y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "-", r) } y = 1 r = x - y if r != 4294967295 { t.Errorf("0 %s 1 = %d, want 4294967295", "-", r) } y = 4294967295 r = x - y if r != 1 { t.Errorf("0 %s 4294967295 = %d, want 1", "-", r) } x = 1 y = 0 r = x - y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "-", r) } y = 1 r = x - y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", "-", r) } y = 4294967295 r = x - y if r != 2 { t.Errorf("1 %s 4294967295 = %d, want 2", "-", r) } x = 4294967295 y = 0 r = x - y if r != 4294967295 { t.Errorf("4294967295 %s 0 = %d, want 4294967295", "-", r) } y = 1 r = x - y if r != 4294967294 { t.Errorf("4294967295 %s 1 = %d, want 4294967294", "-", r) } y = 4294967295 r = x - y if r != 0 { t.Errorf("4294967295 %s 4294967295 = %d, want 0", "-", r) } } func TestConstFolduint32div(t *testing.T) { var x, y, r uint32 x = 0 y = 1 r = x / y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "/", r) } y = 4294967295 r = x / y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", "/", r) } x = 1 y = 1 r = x / y if r != 1 { t.Errorf("1 %s 1 = %d, want 1", "/", r) } y = 4294967295 r = x / y if r != 0 { t.Errorf("1 %s 4294967295 = %d, want 0", "/", r) } x = 4294967295 y = 1 r = x / y if r != 4294967295 { t.Errorf("4294967295 %s 1 = %d, want 4294967295", "/", r) } y = 4294967295 r = x / y if r != 1 { t.Errorf("4294967295 %s 4294967295 = %d, want 1", "/", r) } } func TestConstFolduint32mul(t *testing.T) { var x, y, r uint32 x = 0 y = 0 r = x * y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "*", r) } y = 4294967295 r = x * y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", "*", r) } x = 1 y = 0 r = x * y if r != 0 { t.Errorf("1 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 1 { t.Errorf("1 %s 1 = %d, want 1", "*", r) } y = 4294967295 r = x * y if r != 4294967295 { t.Errorf("1 %s 4294967295 = %d, want 4294967295", "*", r) } x = 4294967295 y = 0 r = x * y if r != 0 { t.Errorf("4294967295 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 4294967295 { t.Errorf("4294967295 %s 1 = %d, want 4294967295", "*", r) } y = 4294967295 r = x * y if r != 1 { t.Errorf("4294967295 %s 4294967295 = %d, want 1", "*", r) } } func TestConstFolduint32mod(t *testing.T) { var x, y, r uint32 x = 0 y = 1 r = x % y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "%", r) } y = 4294967295 r = x % y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", "%", r) } x = 1 y = 1 r = x % y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", "%", r) } y = 4294967295 r = x % y if r != 1 { t.Errorf("1 %s 4294967295 = %d, want 1", "%", r) } x = 4294967295 y = 1 r = x % y if r != 0 { t.Errorf("4294967295 %s 1 = %d, want 0", "%", r) } y = 4294967295 r = x % y if r != 0 { t.Errorf("4294967295 %s 4294967295 = %d, want 0", "%", r) } } func TestConstFoldint32add(t *testing.T) { var x, y, r int32 x = -2147483648 y = -2147483648 r = x + y if r != 0 { t.Errorf("-2147483648 %s -2147483648 = %d, want 0", "+", r) } y = -2147483647 r = x + y if r != 1 { t.Errorf("-2147483648 %s -2147483647 = %d, want 1", "+", r) } y = -1 r = x + y if r != 2147483647 { t.Errorf("-2147483648 %s -1 = %d, want 2147483647", "+", r) } y = 0 r = x + y if r != -2147483648 { t.Errorf("-2147483648 %s 0 = %d, want -2147483648", "+", r) } y = 1 r = x + y if r != -2147483647 { t.Errorf("-2147483648 %s 1 = %d, want -2147483647", "+", r) } y = 2147483647 r = x + y if r != -1 { t.Errorf("-2147483648 %s 2147483647 = %d, want -1", "+", r) } x = -2147483647 y = -2147483648 r = x + y if r != 1 { t.Errorf("-2147483647 %s -2147483648 = %d, want 1", "+", r) } y = -2147483647 r = x + y if r != 2 { t.Errorf("-2147483647 %s -2147483647 = %d, want 2", "+", r) } y = -1 r = x + y if r != -2147483648 { t.Errorf("-2147483647 %s -1 = %d, want -2147483648", "+", r) } y = 0 r = x + y if r != -2147483647 { t.Errorf("-2147483647 %s 0 = %d, want -2147483647", "+", r) } y = 1 r = x + y if r != -2147483646 { t.Errorf("-2147483647 %s 1 = %d, want -2147483646", "+", r) } y = 2147483647 r = x + y if r != 0 { t.Errorf("-2147483647 %s 2147483647 = %d, want 0", "+", r) } x = -1 y = -2147483648 r = x + y if r != 2147483647 { t.Errorf("-1 %s -2147483648 = %d, want 2147483647", "+", r) } y = -2147483647 r = x + y if r != -2147483648 { t.Errorf("-1 %s -2147483647 = %d, want -2147483648", "+", r) } y = -1 r = x + y if r != -2 { t.Errorf("-1 %s -1 = %d, want -2", "+", r) } y = 0 r = x + y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "+", r) } y = 1 r = x + y if r != 0 { t.Errorf("-1 %s 1 = %d, want 0", "+", r) } y = 2147483647 r = x + y if r != 2147483646 { t.Errorf("-1 %s 2147483647 = %d, want 2147483646", "+", r) } x = 0 y = -2147483648 r = x + y if r != -2147483648 { t.Errorf("0 %s -2147483648 = %d, want -2147483648", "+", r) } y = -2147483647 r = x + y if r != -2147483647 { t.Errorf("0 %s -2147483647 = %d, want -2147483647", "+", r) } y = -1 r = x + y if r != -1 { t.Errorf("0 %s -1 = %d, want -1", "+", r) } y = 0 r = x + y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "+", r) } y = 1 r = x + y if r != 1 { t.Errorf("0 %s 1 = %d, want 1", "+", r) } y = 2147483647 r = x + y if r != 2147483647 { t.Errorf("0 %s 2147483647 = %d, want 2147483647", "+", r) } x = 1 y = -2147483648 r = x + y if r != -2147483647 { t.Errorf("1 %s -2147483648 = %d, want -2147483647", "+", r) } y = -2147483647 r = x + y if r != -2147483646 { t.Errorf("1 %s -2147483647 = %d, want -2147483646", "+", r) } y = -1 r = x + y if r != 0 { t.Errorf("1 %s -1 = %d, want 0", "+", r) } y = 0 r = x + y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "+", r) } y = 1 r = x + y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "+", r) } y = 2147483647 r = x + y if r != -2147483648 { t.Errorf("1 %s 2147483647 = %d, want -2147483648", "+", r) } x = 2147483647 y = -2147483648 r = x + y if r != -1 { t.Errorf("2147483647 %s -2147483648 = %d, want -1", "+", r) } y = -2147483647 r = x + y if r != 0 { t.Errorf("2147483647 %s -2147483647 = %d, want 0", "+", r) } y = -1 r = x + y if r != 2147483646 { t.Errorf("2147483647 %s -1 = %d, want 2147483646", "+", r) } y = 0 r = x + y if r != 2147483647 { t.Errorf("2147483647 %s 0 = %d, want 2147483647", "+", r) } y = 1 r = x + y if r != -2147483648 { t.Errorf("2147483647 %s 1 = %d, want -2147483648", "+", r) } y = 2147483647 r = x + y if r != -2 { t.Errorf("2147483647 %s 2147483647 = %d, want -2", "+", r) } } func TestConstFoldint32sub(t *testing.T) { var x, y, r int32 x = -2147483648 y = -2147483648 r = x - y if r != 0 { t.Errorf("-2147483648 %s -2147483648 = %d, want 0", "-", r) } y = -2147483647 r = x - y if r != -1 { t.Errorf("-2147483648 %s -2147483647 = %d, want -1", "-", r) } y = -1 r = x - y if r != -2147483647 { t.Errorf("-2147483648 %s -1 = %d, want -2147483647", "-", r) } y = 0 r = x - y if r != -2147483648 { t.Errorf("-2147483648 %s 0 = %d, want -2147483648", "-", r) } y = 1 r = x - y if r != 2147483647 { t.Errorf("-2147483648 %s 1 = %d, want 2147483647", "-", r) } y = 2147483647 r = x - y if r != 1 { t.Errorf("-2147483648 %s 2147483647 = %d, want 1", "-", r) } x = -2147483647 y = -2147483648 r = x - y if r != 1 { t.Errorf("-2147483647 %s -2147483648 = %d, want 1", "-", r) } y = -2147483647 r = x - y if r != 0 { t.Errorf("-2147483647 %s -2147483647 = %d, want 0", "-", r) } y = -1 r = x - y if r != -2147483646 { t.Errorf("-2147483647 %s -1 = %d, want -2147483646", "-", r) } y = 0 r = x - y if r != -2147483647 { t.Errorf("-2147483647 %s 0 = %d, want -2147483647", "-", r) } y = 1 r = x - y if r != -2147483648 { t.Errorf("-2147483647 %s 1 = %d, want -2147483648", "-", r) } y = 2147483647 r = x - y if r != 2 { t.Errorf("-2147483647 %s 2147483647 = %d, want 2", "-", r) } x = -1 y = -2147483648 r = x - y if r != 2147483647 { t.Errorf("-1 %s -2147483648 = %d, want 2147483647", "-", r) } y = -2147483647 r = x - y if r != 2147483646 { t.Errorf("-1 %s -2147483647 = %d, want 2147483646", "-", r) } y = -1 r = x - y if r != 0 { t.Errorf("-1 %s -1 = %d, want 0", "-", r) } y = 0 r = x - y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "-", r) } y = 1 r = x - y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "-", r) } y = 2147483647 r = x - y if r != -2147483648 { t.Errorf("-1 %s 2147483647 = %d, want -2147483648", "-", r) } x = 0 y = -2147483648 r = x - y if r != -2147483648 { t.Errorf("0 %s -2147483648 = %d, want -2147483648", "-", r) } y = -2147483647 r = x - y if r != 2147483647 { t.Errorf("0 %s -2147483647 = %d, want 2147483647", "-", r) } y = -1 r = x - y if r != 1 { t.Errorf("0 %s -1 = %d, want 1", "-", r) } y = 0 r = x - y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "-", r) } y = 1 r = x - y if r != -1 { t.Errorf("0 %s 1 = %d, want -1", "-", r) } y = 2147483647 r = x - y if r != -2147483647 { t.Errorf("0 %s 2147483647 = %d, want -2147483647", "-", r) } x = 1 y = -2147483648 r = x - y if r != -2147483647 { t.Errorf("1 %s -2147483648 = %d, want -2147483647", "-", r) } y = -2147483647 r = x - y if r != -2147483648 { t.Errorf("1 %s -2147483647 = %d, want -2147483648", "-", r) } y = -1 r = x - y if r != 2 { t.Errorf("1 %s -1 = %d, want 2", "-", r) } y = 0 r = x - y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "-", r) } y = 1 r = x - y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", "-", r) } y = 2147483647 r = x - y if r != -2147483646 { t.Errorf("1 %s 2147483647 = %d, want -2147483646", "-", r) } x = 2147483647 y = -2147483648 r = x - y if r != -1 { t.Errorf("2147483647 %s -2147483648 = %d, want -1", "-", r) } y = -2147483647 r = x - y if r != -2 { t.Errorf("2147483647 %s -2147483647 = %d, want -2", "-", r) } y = -1 r = x - y if r != -2147483648 { t.Errorf("2147483647 %s -1 = %d, want -2147483648", "-", r) } y = 0 r = x - y if r != 2147483647 { t.Errorf("2147483647 %s 0 = %d, want 2147483647", "-", r) } y = 1 r = x - y if r != 2147483646 { t.Errorf("2147483647 %s 1 = %d, want 2147483646", "-", r) } y = 2147483647 r = x - y if r != 0 { t.Errorf("2147483647 %s 2147483647 = %d, want 0", "-", r) } } func TestConstFoldint32div(t *testing.T) { var x, y, r int32 x = -2147483648 y = -2147483648 r = x / y if r != 1 { t.Errorf("-2147483648 %s -2147483648 = %d, want 1", "/", r) } y = -2147483647 r = x / y if r != 1 { t.Errorf("-2147483648 %s -2147483647 = %d, want 1", "/", r) } y = -1 r = x / y if r != -2147483648 { t.Errorf("-2147483648 %s -1 = %d, want -2147483648", "/", r) } y = 1 r = x / y if r != -2147483648 { t.Errorf("-2147483648 %s 1 = %d, want -2147483648", "/", r) } y = 2147483647 r = x / y if r != -1 { t.Errorf("-2147483648 %s 2147483647 = %d, want -1", "/", r) } x = -2147483647 y = -2147483648 r = x / y if r != 0 { t.Errorf("-2147483647 %s -2147483648 = %d, want 0", "/", r) } y = -2147483647 r = x / y if r != 1 { t.Errorf("-2147483647 %s -2147483647 = %d, want 1", "/", r) } y = -1 r = x / y if r != 2147483647 { t.Errorf("-2147483647 %s -1 = %d, want 2147483647", "/", r) } y = 1 r = x / y if r != -2147483647 { t.Errorf("-2147483647 %s 1 = %d, want -2147483647", "/", r) } y = 2147483647 r = x / y if r != -1 { t.Errorf("-2147483647 %s 2147483647 = %d, want -1", "/", r) } x = -1 y = -2147483648 r = x / y if r != 0 { t.Errorf("-1 %s -2147483648 = %d, want 0", "/", r) } y = -2147483647 r = x / y if r != 0 { t.Errorf("-1 %s -2147483647 = %d, want 0", "/", r) } y = -1 r = x / y if r != 1 { t.Errorf("-1 %s -1 = %d, want 1", "/", r) } y = 1 r = x / y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", "/", r) } y = 2147483647 r = x / y if r != 0 { t.Errorf("-1 %s 2147483647 = %d, want 0", "/", r) } x = 0 y = -2147483648 r = x / y if r != 0 { t.Errorf("0 %s -2147483648 = %d, want 0", "/", r) } y = -2147483647 r = x / y if r != 0 { t.Errorf("0 %s -2147483647 = %d, want 0", "/", r) } y = -1 r = x / y if r != 0 { t.Errorf("0 %s -1 = %d, want 0", "/", r) } y = 1 r = x / y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "/", r) } y = 2147483647 r = x / y if r != 0 { t.Errorf("0 %s 2147483647 = %d, want 0", "/", r) } x = 1 y = -2147483648 r = x / y if r != 0 { t.Errorf("1 %s -2147483648 = %d, want 0", "/", r) } y = -2147483647 r = x / y if r != 0 { t.Errorf("1 %s -2147483647 = %d, want 0", "/", r) } y = -1 r = x / y if r != -1 { t.Errorf("1 %s -1 = %d, want -1", "/", r) } y = 1 r = x / y if r != 1 { t.Errorf("1 %s 1 = %d, want 1", "/", r) } y = 2147483647 r = x / y if r != 0 { t.Errorf("1 %s 2147483647 = %d, want 0", "/", r) } x = 2147483647 y = -2147483648 r = x / y if r != 0 { t.Errorf("2147483647 %s -2147483648 = %d, want 0", "/", r) } y = -2147483647 r = x / y if r != -1 { t.Errorf("2147483647 %s -2147483647 = %d, want -1", "/", r) } y = -1 r = x / y if r != -2147483647 { t.Errorf("2147483647 %s -1 = %d, want -2147483647", "/", r) } y = 1 r = x / y if r != 2147483647 { t.Errorf("2147483647 %s 1 = %d, want 2147483647", "/", r) } y = 2147483647 r = x / y if r != 1 { t.Errorf("2147483647 %s 2147483647 = %d, want 1", "/", r) } } func TestConstFoldint32mul(t *testing.T) { var x, y, r int32 x = -2147483648 y = -2147483648 r = x * y if r != 0 { t.Errorf("-2147483648 %s -2147483648 = %d, want 0", "*", r) } y = -2147483647 r = x * y if r != -2147483648 { t.Errorf("-2147483648 %s -2147483647 = %d, want -2147483648", "*", r) } y = -1 r = x * y if r != -2147483648 { t.Errorf("-2147483648 %s -1 = %d, want -2147483648", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("-2147483648 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != -2147483648 { t.Errorf("-2147483648 %s 1 = %d, want -2147483648", "*", r) } y = 2147483647 r = x * y if r != -2147483648 { t.Errorf("-2147483648 %s 2147483647 = %d, want -2147483648", "*", r) } x = -2147483647 y = -2147483648 r = x * y if r != -2147483648 { t.Errorf("-2147483647 %s -2147483648 = %d, want -2147483648", "*", r) } y = -2147483647 r = x * y if r != 1 { t.Errorf("-2147483647 %s -2147483647 = %d, want 1", "*", r) } y = -1 r = x * y if r != 2147483647 { t.Errorf("-2147483647 %s -1 = %d, want 2147483647", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("-2147483647 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != -2147483647 { t.Errorf("-2147483647 %s 1 = %d, want -2147483647", "*", r) } y = 2147483647 r = x * y if r != -1 { t.Errorf("-2147483647 %s 2147483647 = %d, want -1", "*", r) } x = -1 y = -2147483648 r = x * y if r != -2147483648 { t.Errorf("-1 %s -2147483648 = %d, want -2147483648", "*", r) } y = -2147483647 r = x * y if r != 2147483647 { t.Errorf("-1 %s -2147483647 = %d, want 2147483647", "*", r) } y = -1 r = x * y if r != 1 { t.Errorf("-1 %s -1 = %d, want 1", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("-1 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", "*", r) } y = 2147483647 r = x * y if r != -2147483647 { t.Errorf("-1 %s 2147483647 = %d, want -2147483647", "*", r) } x = 0 y = -2147483648 r = x * y if r != 0 { t.Errorf("0 %s -2147483648 = %d, want 0", "*", r) } y = -2147483647 r = x * y if r != 0 { t.Errorf("0 %s -2147483647 = %d, want 0", "*", r) } y = -1 r = x * y if r != 0 { t.Errorf("0 %s -1 = %d, want 0", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "*", r) } y = 2147483647 r = x * y if r != 0 { t.Errorf("0 %s 2147483647 = %d, want 0", "*", r) } x = 1 y = -2147483648 r = x * y if r != -2147483648 { t.Errorf("1 %s -2147483648 = %d, want -2147483648", "*", r) } y = -2147483647 r = x * y if r != -2147483647 { t.Errorf("1 %s -2147483647 = %d, want -2147483647", "*", r) } y = -1 r = x * y if r != -1 { t.Errorf("1 %s -1 = %d, want -1", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("1 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 1 { t.Errorf("1 %s 1 = %d, want 1", "*", r) } y = 2147483647 r = x * y if r != 2147483647 { t.Errorf("1 %s 2147483647 = %d, want 2147483647", "*", r) } x = 2147483647 y = -2147483648 r = x * y if r != -2147483648 { t.Errorf("2147483647 %s -2147483648 = %d, want -2147483648", "*", r) } y = -2147483647 r = x * y if r != -1 { t.Errorf("2147483647 %s -2147483647 = %d, want -1", "*", r) } y = -1 r = x * y if r != -2147483647 { t.Errorf("2147483647 %s -1 = %d, want -2147483647", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("2147483647 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 2147483647 { t.Errorf("2147483647 %s 1 = %d, want 2147483647", "*", r) } y = 2147483647 r = x * y if r != 1 { t.Errorf("2147483647 %s 2147483647 = %d, want 1", "*", r) } } func TestConstFoldint32mod(t *testing.T) { var x, y, r int32 x = -2147483648 y = -2147483648 r = x % y if r != 0 { t.Errorf("-2147483648 %s -2147483648 = %d, want 0", "%", r) } y = -2147483647 r = x % y if r != -1 { t.Errorf("-2147483648 %s -2147483647 = %d, want -1", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("-2147483648 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("-2147483648 %s 1 = %d, want 0", "%", r) } y = 2147483647 r = x % y if r != -1 { t.Errorf("-2147483648 %s 2147483647 = %d, want -1", "%", r) } x = -2147483647 y = -2147483648 r = x % y if r != -2147483647 { t.Errorf("-2147483647 %s -2147483648 = %d, want -2147483647", "%", r) } y = -2147483647 r = x % y if r != 0 { t.Errorf("-2147483647 %s -2147483647 = %d, want 0", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("-2147483647 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("-2147483647 %s 1 = %d, want 0", "%", r) } y = 2147483647 r = x % y if r != 0 { t.Errorf("-2147483647 %s 2147483647 = %d, want 0", "%", r) } x = -1 y = -2147483648 r = x % y if r != -1 { t.Errorf("-1 %s -2147483648 = %d, want -1", "%", r) } y = -2147483647 r = x % y if r != -1 { t.Errorf("-1 %s -2147483647 = %d, want -1", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("-1 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("-1 %s 1 = %d, want 0", "%", r) } y = 2147483647 r = x % y if r != -1 { t.Errorf("-1 %s 2147483647 = %d, want -1", "%", r) } x = 0 y = -2147483648 r = x % y if r != 0 { t.Errorf("0 %s -2147483648 = %d, want 0", "%", r) } y = -2147483647 r = x % y if r != 0 { t.Errorf("0 %s -2147483647 = %d, want 0", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("0 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "%", r) } y = 2147483647 r = x % y if r != 0 { t.Errorf("0 %s 2147483647 = %d, want 0", "%", r) } x = 1 y = -2147483648 r = x % y if r != 1 { t.Errorf("1 %s -2147483648 = %d, want 1", "%", r) } y = -2147483647 r = x % y if r != 1 { t.Errorf("1 %s -2147483647 = %d, want 1", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("1 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", "%", r) } y = 2147483647 r = x % y if r != 1 { t.Errorf("1 %s 2147483647 = %d, want 1", "%", r) } x = 2147483647 y = -2147483648 r = x % y if r != 2147483647 { t.Errorf("2147483647 %s -2147483648 = %d, want 2147483647", "%", r) } y = -2147483647 r = x % y if r != 0 { t.Errorf("2147483647 %s -2147483647 = %d, want 0", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("2147483647 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("2147483647 %s 1 = %d, want 0", "%", r) } y = 2147483647 r = x % y if r != 0 { t.Errorf("2147483647 %s 2147483647 = %d, want 0", "%", r) } } func TestConstFolduint16add(t *testing.T) { var x, y, r uint16 x = 0 y = 0 r = x + y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "+", r) } y = 1 r = x + y if r != 1 { t.Errorf("0 %s 1 = %d, want 1", "+", r) } y = 65535 r = x + y if r != 65535 { t.Errorf("0 %s 65535 = %d, want 65535", "+", r) } x = 1 y = 0 r = x + y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "+", r) } y = 1 r = x + y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "+", r) } y = 65535 r = x + y if r != 0 { t.Errorf("1 %s 65535 = %d, want 0", "+", r) } x = 65535 y = 0 r = x + y if r != 65535 { t.Errorf("65535 %s 0 = %d, want 65535", "+", r) } y = 1 r = x + y if r != 0 { t.Errorf("65535 %s 1 = %d, want 0", "+", r) } y = 65535 r = x + y if r != 65534 { t.Errorf("65535 %s 65535 = %d, want 65534", "+", r) } } func TestConstFolduint16sub(t *testing.T) { var x, y, r uint16 x = 0 y = 0 r = x - y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "-", r) } y = 1 r = x - y if r != 65535 { t.Errorf("0 %s 1 = %d, want 65535", "-", r) } y = 65535 r = x - y if r != 1 { t.Errorf("0 %s 65535 = %d, want 1", "-", r) } x = 1 y = 0 r = x - y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "-", r) } y = 1 r = x - y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", "-", r) } y = 65535 r = x - y if r != 2 { t.Errorf("1 %s 65535 = %d, want 2", "-", r) } x = 65535 y = 0 r = x - y if r != 65535 { t.Errorf("65535 %s 0 = %d, want 65535", "-", r) } y = 1 r = x - y if r != 65534 { t.Errorf("65535 %s 1 = %d, want 65534", "-", r) } y = 65535 r = x - y if r != 0 { t.Errorf("65535 %s 65535 = %d, want 0", "-", r) } } func TestConstFolduint16div(t *testing.T) { var x, y, r uint16 x = 0 y = 1 r = x / y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "/", r) } y = 65535 r = x / y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", "/", r) } x = 1 y = 1 r = x / y if r != 1 { t.Errorf("1 %s 1 = %d, want 1", "/", r) } y = 65535 r = x / y if r != 0 { t.Errorf("1 %s 65535 = %d, want 0", "/", r) } x = 65535 y = 1 r = x / y if r != 65535 { t.Errorf("65535 %s 1 = %d, want 65535", "/", r) } y = 65535 r = x / y if r != 1 { t.Errorf("65535 %s 65535 = %d, want 1", "/", r) } } func TestConstFolduint16mul(t *testing.T) { var x, y, r uint16 x = 0 y = 0 r = x * y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "*", r) } y = 65535 r = x * y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", "*", r) } x = 1 y = 0 r = x * y if r != 0 { t.Errorf("1 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 1 { t.Errorf("1 %s 1 = %d, want 1", "*", r) } y = 65535 r = x * y if r != 65535 { t.Errorf("1 %s 65535 = %d, want 65535", "*", r) } x = 65535 y = 0 r = x * y if r != 0 { t.Errorf("65535 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 65535 { t.Errorf("65535 %s 1 = %d, want 65535", "*", r) } y = 65535 r = x * y if r != 1 { t.Errorf("65535 %s 65535 = %d, want 1", "*", r) } } func TestConstFolduint16mod(t *testing.T) { var x, y, r uint16 x = 0 y = 1 r = x % y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "%", r) } y = 65535 r = x % y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", "%", r) } x = 1 y = 1 r = x % y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", "%", r) } y = 65535 r = x % y if r != 1 { t.Errorf("1 %s 65535 = %d, want 1", "%", r) } x = 65535 y = 1 r = x % y if r != 0 { t.Errorf("65535 %s 1 = %d, want 0", "%", r) } y = 65535 r = x % y if r != 0 { t.Errorf("65535 %s 65535 = %d, want 0", "%", r) } } func TestConstFoldint16add(t *testing.T) { var x, y, r int16 x = -32768 y = -32768 r = x + y if r != 0 { t.Errorf("-32768 %s -32768 = %d, want 0", "+", r) } y = -32767 r = x + y if r != 1 { t.Errorf("-32768 %s -32767 = %d, want 1", "+", r) } y = -1 r = x + y if r != 32767 { t.Errorf("-32768 %s -1 = %d, want 32767", "+", r) } y = 0 r = x + y if r != -32768 { t.Errorf("-32768 %s 0 = %d, want -32768", "+", r) } y = 1 r = x + y if r != -32767 { t.Errorf("-32768 %s 1 = %d, want -32767", "+", r) } y = 32766 r = x + y if r != -2 { t.Errorf("-32768 %s 32766 = %d, want -2", "+", r) } y = 32767 r = x + y if r != -1 { t.Errorf("-32768 %s 32767 = %d, want -1", "+", r) } x = -32767 y = -32768 r = x + y if r != 1 { t.Errorf("-32767 %s -32768 = %d, want 1", "+", r) } y = -32767 r = x + y if r != 2 { t.Errorf("-32767 %s -32767 = %d, want 2", "+", r) } y = -1 r = x + y if r != -32768 { t.Errorf("-32767 %s -1 = %d, want -32768", "+", r) } y = 0 r = x + y if r != -32767 { t.Errorf("-32767 %s 0 = %d, want -32767", "+", r) } y = 1 r = x + y if r != -32766 { t.Errorf("-32767 %s 1 = %d, want -32766", "+", r) } y = 32766 r = x + y if r != -1 { t.Errorf("-32767 %s 32766 = %d, want -1", "+", r) } y = 32767 r = x + y if r != 0 { t.Errorf("-32767 %s 32767 = %d, want 0", "+", r) } x = -1 y = -32768 r = x + y if r != 32767 { t.Errorf("-1 %s -32768 = %d, want 32767", "+", r) } y = -32767 r = x + y if r != -32768 { t.Errorf("-1 %s -32767 = %d, want -32768", "+", r) } y = -1 r = x + y if r != -2 { t.Errorf("-1 %s -1 = %d, want -2", "+", r) } y = 0 r = x + y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "+", r) } y = 1 r = x + y if r != 0 { t.Errorf("-1 %s 1 = %d, want 0", "+", r) } y = 32766 r = x + y if r != 32765 { t.Errorf("-1 %s 32766 = %d, want 32765", "+", r) } y = 32767 r = x + y if r != 32766 { t.Errorf("-1 %s 32767 = %d, want 32766", "+", r) } x = 0 y = -32768 r = x + y if r != -32768 { t.Errorf("0 %s -32768 = %d, want -32768", "+", r) } y = -32767 r = x + y if r != -32767 { t.Errorf("0 %s -32767 = %d, want -32767", "+", r) } y = -1 r = x + y if r != -1 { t.Errorf("0 %s -1 = %d, want -1", "+", r) } y = 0 r = x + y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "+", r) } y = 1 r = x + y if r != 1 { t.Errorf("0 %s 1 = %d, want 1", "+", r) } y = 32766 r = x + y if r != 32766 { t.Errorf("0 %s 32766 = %d, want 32766", "+", r) } y = 32767 r = x + y if r != 32767 { t.Errorf("0 %s 32767 = %d, want 32767", "+", r) } x = 1 y = -32768 r = x + y if r != -32767 { t.Errorf("1 %s -32768 = %d, want -32767", "+", r) } y = -32767 r = x + y if r != -32766 { t.Errorf("1 %s -32767 = %d, want -32766", "+", r) } y = -1 r = x + y if r != 0 { t.Errorf("1 %s -1 = %d, want 0", "+", r) } y = 0 r = x + y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "+", r) } y = 1 r = x + y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "+", r) } y = 32766 r = x + y if r != 32767 { t.Errorf("1 %s 32766 = %d, want 32767", "+", r) } y = 32767 r = x + y if r != -32768 { t.Errorf("1 %s 32767 = %d, want -32768", "+", r) } x = 32766 y = -32768 r = x + y if r != -2 { t.Errorf("32766 %s -32768 = %d, want -2", "+", r) } y = -32767 r = x + y if r != -1 { t.Errorf("32766 %s -32767 = %d, want -1", "+", r) } y = -1 r = x + y if r != 32765 { t.Errorf("32766 %s -1 = %d, want 32765", "+", r) } y = 0 r = x + y if r != 32766 { t.Errorf("32766 %s 0 = %d, want 32766", "+", r) } y = 1 r = x + y if r != 32767 { t.Errorf("32766 %s 1 = %d, want 32767", "+", r) } y = 32766 r = x + y if r != -4 { t.Errorf("32766 %s 32766 = %d, want -4", "+", r) } y = 32767 r = x + y if r != -3 { t.Errorf("32766 %s 32767 = %d, want -3", "+", r) } x = 32767 y = -32768 r = x + y if r != -1 { t.Errorf("32767 %s -32768 = %d, want -1", "+", r) } y = -32767 r = x + y if r != 0 { t.Errorf("32767 %s -32767 = %d, want 0", "+", r) } y = -1 r = x + y if r != 32766 { t.Errorf("32767 %s -1 = %d, want 32766", "+", r) } y = 0 r = x + y if r != 32767 { t.Errorf("32767 %s 0 = %d, want 32767", "+", r) } y = 1 r = x + y if r != -32768 { t.Errorf("32767 %s 1 = %d, want -32768", "+", r) } y = 32766 r = x + y if r != -3 { t.Errorf("32767 %s 32766 = %d, want -3", "+", r) } y = 32767 r = x + y if r != -2 { t.Errorf("32767 %s 32767 = %d, want -2", "+", r) } } func TestConstFoldint16sub(t *testing.T) { var x, y, r int16 x = -32768 y = -32768 r = x - y if r != 0 { t.Errorf("-32768 %s -32768 = %d, want 0", "-", r) } y = -32767 r = x - y if r != -1 { t.Errorf("-32768 %s -32767 = %d, want -1", "-", r) } y = -1 r = x - y if r != -32767 { t.Errorf("-32768 %s -1 = %d, want -32767", "-", r) } y = 0 r = x - y if r != -32768 { t.Errorf("-32768 %s 0 = %d, want -32768", "-", r) } y = 1 r = x - y if r != 32767 { t.Errorf("-32768 %s 1 = %d, want 32767", "-", r) } y = 32766 r = x - y if r != 2 { t.Errorf("-32768 %s 32766 = %d, want 2", "-", r) } y = 32767 r = x - y if r != 1 { t.Errorf("-32768 %s 32767 = %d, want 1", "-", r) } x = -32767 y = -32768 r = x - y if r != 1 { t.Errorf("-32767 %s -32768 = %d, want 1", "-", r) } y = -32767 r = x - y if r != 0 { t.Errorf("-32767 %s -32767 = %d, want 0", "-", r) } y = -1 r = x - y if r != -32766 { t.Errorf("-32767 %s -1 = %d, want -32766", "-", r) } y = 0 r = x - y if r != -32767 { t.Errorf("-32767 %s 0 = %d, want -32767", "-", r) } y = 1 r = x - y if r != -32768 { t.Errorf("-32767 %s 1 = %d, want -32768", "-", r) } y = 32766 r = x - y if r != 3 { t.Errorf("-32767 %s 32766 = %d, want 3", "-", r) } y = 32767 r = x - y if r != 2 { t.Errorf("-32767 %s 32767 = %d, want 2", "-", r) } x = -1 y = -32768 r = x - y if r != 32767 { t.Errorf("-1 %s -32768 = %d, want 32767", "-", r) } y = -32767 r = x - y if r != 32766 { t.Errorf("-1 %s -32767 = %d, want 32766", "-", r) } y = -1 r = x - y if r != 0 { t.Errorf("-1 %s -1 = %d, want 0", "-", r) } y = 0 r = x - y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "-", r) } y = 1 r = x - y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "-", r) } y = 32766 r = x - y if r != -32767 { t.Errorf("-1 %s 32766 = %d, want -32767", "-", r) } y = 32767 r = x - y if r != -32768 { t.Errorf("-1 %s 32767 = %d, want -32768", "-", r) } x = 0 y = -32768 r = x - y if r != -32768 { t.Errorf("0 %s -32768 = %d, want -32768", "-", r) } y = -32767 r = x - y if r != 32767 { t.Errorf("0 %s -32767 = %d, want 32767", "-", r) } y = -1 r = x - y if r != 1 { t.Errorf("0 %s -1 = %d, want 1", "-", r) } y = 0 r = x - y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "-", r) } y = 1 r = x - y if r != -1 { t.Errorf("0 %s 1 = %d, want -1", "-", r) } y = 32766 r = x - y if r != -32766 { t.Errorf("0 %s 32766 = %d, want -32766", "-", r) } y = 32767 r = x - y if r != -32767 { t.Errorf("0 %s 32767 = %d, want -32767", "-", r) } x = 1 y = -32768 r = x - y if r != -32767 { t.Errorf("1 %s -32768 = %d, want -32767", "-", r) } y = -32767 r = x - y if r != -32768 { t.Errorf("1 %s -32767 = %d, want -32768", "-", r) } y = -1 r = x - y if r != 2 { t.Errorf("1 %s -1 = %d, want 2", "-", r) } y = 0 r = x - y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "-", r) } y = 1 r = x - y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", "-", r) } y = 32766 r = x - y if r != -32765 { t.Errorf("1 %s 32766 = %d, want -32765", "-", r) } y = 32767 r = x - y if r != -32766 { t.Errorf("1 %s 32767 = %d, want -32766", "-", r) } x = 32766 y = -32768 r = x - y if r != -2 { t.Errorf("32766 %s -32768 = %d, want -2", "-", r) } y = -32767 r = x - y if r != -3 { t.Errorf("32766 %s -32767 = %d, want -3", "-", r) } y = -1 r = x - y if r != 32767 { t.Errorf("32766 %s -1 = %d, want 32767", "-", r) } y = 0 r = x - y if r != 32766 { t.Errorf("32766 %s 0 = %d, want 32766", "-", r) } y = 1 r = x - y if r != 32765 { t.Errorf("32766 %s 1 = %d, want 32765", "-", r) } y = 32766 r = x - y if r != 0 { t.Errorf("32766 %s 32766 = %d, want 0", "-", r) } y = 32767 r = x - y if r != -1 { t.Errorf("32766 %s 32767 = %d, want -1", "-", r) } x = 32767 y = -32768 r = x - y if r != -1 { t.Errorf("32767 %s -32768 = %d, want -1", "-", r) } y = -32767 r = x - y if r != -2 { t.Errorf("32767 %s -32767 = %d, want -2", "-", r) } y = -1 r = x - y if r != -32768 { t.Errorf("32767 %s -1 = %d, want -32768", "-", r) } y = 0 r = x - y if r != 32767 { t.Errorf("32767 %s 0 = %d, want 32767", "-", r) } y = 1 r = x - y if r != 32766 { t.Errorf("32767 %s 1 = %d, want 32766", "-", r) } y = 32766 r = x - y if r != 1 { t.Errorf("32767 %s 32766 = %d, want 1", "-", r) } y = 32767 r = x - y if r != 0 { t.Errorf("32767 %s 32767 = %d, want 0", "-", r) } } func TestConstFoldint16div(t *testing.T) { var x, y, r int16 x = -32768 y = -32768 r = x / y if r != 1 { t.Errorf("-32768 %s -32768 = %d, want 1", "/", r) } y = -32767 r = x / y if r != 1 { t.Errorf("-32768 %s -32767 = %d, want 1", "/", r) } y = -1 r = x / y if r != -32768 { t.Errorf("-32768 %s -1 = %d, want -32768", "/", r) } y = 1 r = x / y if r != -32768 { t.Errorf("-32768 %s 1 = %d, want -32768", "/", r) } y = 32766 r = x / y if r != -1 { t.Errorf("-32768 %s 32766 = %d, want -1", "/", r) } y = 32767 r = x / y if r != -1 { t.Errorf("-32768 %s 32767 = %d, want -1", "/", r) } x = -32767 y = -32768 r = x / y if r != 0 { t.Errorf("-32767 %s -32768 = %d, want 0", "/", r) } y = -32767 r = x / y if r != 1 { t.Errorf("-32767 %s -32767 = %d, want 1", "/", r) } y = -1 r = x / y if r != 32767 { t.Errorf("-32767 %s -1 = %d, want 32767", "/", r) } y = 1 r = x / y if r != -32767 { t.Errorf("-32767 %s 1 = %d, want -32767", "/", r) } y = 32766 r = x / y if r != -1 { t.Errorf("-32767 %s 32766 = %d, want -1", "/", r) } y = 32767 r = x / y if r != -1 { t.Errorf("-32767 %s 32767 = %d, want -1", "/", r) } x = -1 y = -32768 r = x / y if r != 0 { t.Errorf("-1 %s -32768 = %d, want 0", "/", r) } y = -32767 r = x / y if r != 0 { t.Errorf("-1 %s -32767 = %d, want 0", "/", r) } y = -1 r = x / y if r != 1 { t.Errorf("-1 %s -1 = %d, want 1", "/", r) } y = 1 r = x / y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", "/", r) } y = 32766 r = x / y if r != 0 { t.Errorf("-1 %s 32766 = %d, want 0", "/", r) } y = 32767 r = x / y if r != 0 { t.Errorf("-1 %s 32767 = %d, want 0", "/", r) } x = 0 y = -32768 r = x / y if r != 0 { t.Errorf("0 %s -32768 = %d, want 0", "/", r) } y = -32767 r = x / y if r != 0 { t.Errorf("0 %s -32767 = %d, want 0", "/", r) } y = -1 r = x / y if r != 0 { t.Errorf("0 %s -1 = %d, want 0", "/", r) } y = 1 r = x / y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "/", r) } y = 32766 r = x / y if r != 0 { t.Errorf("0 %s 32766 = %d, want 0", "/", r) } y = 32767 r = x / y if r != 0 { t.Errorf("0 %s 32767 = %d, want 0", "/", r) } x = 1 y = -32768 r = x / y if r != 0 { t.Errorf("1 %s -32768 = %d, want 0", "/", r) } y = -32767 r = x / y if r != 0 { t.Errorf("1 %s -32767 = %d, want 0", "/", r) } y = -1 r = x / y if r != -1 { t.Errorf("1 %s -1 = %d, want -1", "/", r) } y = 1 r = x / y if r != 1 { t.Errorf("1 %s 1 = %d, want 1", "/", r) } y = 32766 r = x / y if r != 0 { t.Errorf("1 %s 32766 = %d, want 0", "/", r) } y = 32767 r = x / y if r != 0 { t.Errorf("1 %s 32767 = %d, want 0", "/", r) } x = 32766 y = -32768 r = x / y if r != 0 { t.Errorf("32766 %s -32768 = %d, want 0", "/", r) } y = -32767 r = x / y if r != 0 { t.Errorf("32766 %s -32767 = %d, want 0", "/", r) } y = -1 r = x / y if r != -32766 { t.Errorf("32766 %s -1 = %d, want -32766", "/", r) } y = 1 r = x / y if r != 32766 { t.Errorf("32766 %s 1 = %d, want 32766", "/", r) } y = 32766 r = x / y if r != 1 { t.Errorf("32766 %s 32766 = %d, want 1", "/", r) } y = 32767 r = x / y if r != 0 { t.Errorf("32766 %s 32767 = %d, want 0", "/", r) } x = 32767 y = -32768 r = x / y if r != 0 { t.Errorf("32767 %s -32768 = %d, want 0", "/", r) } y = -32767 r = x / y if r != -1 { t.Errorf("32767 %s -32767 = %d, want -1", "/", r) } y = -1 r = x / y if r != -32767 { t.Errorf("32767 %s -1 = %d, want -32767", "/", r) } y = 1 r = x / y if r != 32767 { t.Errorf("32767 %s 1 = %d, want 32767", "/", r) } y = 32766 r = x / y if r != 1 { t.Errorf("32767 %s 32766 = %d, want 1", "/", r) } y = 32767 r = x / y if r != 1 { t.Errorf("32767 %s 32767 = %d, want 1", "/", r) } } func TestConstFoldint16mul(t *testing.T) { var x, y, r int16 x = -32768 y = -32768 r = x * y if r != 0 { t.Errorf("-32768 %s -32768 = %d, want 0", "*", r) } y = -32767 r = x * y if r != -32768 { t.Errorf("-32768 %s -32767 = %d, want -32768", "*", r) } y = -1 r = x * y if r != -32768 { t.Errorf("-32768 %s -1 = %d, want -32768", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("-32768 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != -32768 { t.Errorf("-32768 %s 1 = %d, want -32768", "*", r) } y = 32766 r = x * y if r != 0 { t.Errorf("-32768 %s 32766 = %d, want 0", "*", r) } y = 32767 r = x * y if r != -32768 { t.Errorf("-32768 %s 32767 = %d, want -32768", "*", r) } x = -32767 y = -32768 r = x * y if r != -32768 { t.Errorf("-32767 %s -32768 = %d, want -32768", "*", r) } y = -32767 r = x * y if r != 1 { t.Errorf("-32767 %s -32767 = %d, want 1", "*", r) } y = -1 r = x * y if r != 32767 { t.Errorf("-32767 %s -1 = %d, want 32767", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("-32767 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != -32767 { t.Errorf("-32767 %s 1 = %d, want -32767", "*", r) } y = 32766 r = x * y if r != 32766 { t.Errorf("-32767 %s 32766 = %d, want 32766", "*", r) } y = 32767 r = x * y if r != -1 { t.Errorf("-32767 %s 32767 = %d, want -1", "*", r) } x = -1 y = -32768 r = x * y if r != -32768 { t.Errorf("-1 %s -32768 = %d, want -32768", "*", r) } y = -32767 r = x * y if r != 32767 { t.Errorf("-1 %s -32767 = %d, want 32767", "*", r) } y = -1 r = x * y if r != 1 { t.Errorf("-1 %s -1 = %d, want 1", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("-1 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", "*", r) } y = 32766 r = x * y if r != -32766 { t.Errorf("-1 %s 32766 = %d, want -32766", "*", r) } y = 32767 r = x * y if r != -32767 { t.Errorf("-1 %s 32767 = %d, want -32767", "*", r) } x = 0 y = -32768 r = x * y if r != 0 { t.Errorf("0 %s -32768 = %d, want 0", "*", r) } y = -32767 r = x * y if r != 0 { t.Errorf("0 %s -32767 = %d, want 0", "*", r) } y = -1 r = x * y if r != 0 { t.Errorf("0 %s -1 = %d, want 0", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "*", r) } y = 32766 r = x * y if r != 0 { t.Errorf("0 %s 32766 = %d, want 0", "*", r) } y = 32767 r = x * y if r != 0 { t.Errorf("0 %s 32767 = %d, want 0", "*", r) } x = 1 y = -32768 r = x * y if r != -32768 { t.Errorf("1 %s -32768 = %d, want -32768", "*", r) } y = -32767 r = x * y if r != -32767 { t.Errorf("1 %s -32767 = %d, want -32767", "*", r) } y = -1 r = x * y if r != -1 { t.Errorf("1 %s -1 = %d, want -1", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("1 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 1 { t.Errorf("1 %s 1 = %d, want 1", "*", r) } y = 32766 r = x * y if r != 32766 { t.Errorf("1 %s 32766 = %d, want 32766", "*", r) } y = 32767 r = x * y if r != 32767 { t.Errorf("1 %s 32767 = %d, want 32767", "*", r) } x = 32766 y = -32768 r = x * y if r != 0 { t.Errorf("32766 %s -32768 = %d, want 0", "*", r) } y = -32767 r = x * y if r != 32766 { t.Errorf("32766 %s -32767 = %d, want 32766", "*", r) } y = -1 r = x * y if r != -32766 { t.Errorf("32766 %s -1 = %d, want -32766", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("32766 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 32766 { t.Errorf("32766 %s 1 = %d, want 32766", "*", r) } y = 32766 r = x * y if r != 4 { t.Errorf("32766 %s 32766 = %d, want 4", "*", r) } y = 32767 r = x * y if r != -32766 { t.Errorf("32766 %s 32767 = %d, want -32766", "*", r) } x = 32767 y = -32768 r = x * y if r != -32768 { t.Errorf("32767 %s -32768 = %d, want -32768", "*", r) } y = -32767 r = x * y if r != -1 { t.Errorf("32767 %s -32767 = %d, want -1", "*", r) } y = -1 r = x * y if r != -32767 { t.Errorf("32767 %s -1 = %d, want -32767", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("32767 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 32767 { t.Errorf("32767 %s 1 = %d, want 32767", "*", r) } y = 32766 r = x * y if r != -32766 { t.Errorf("32767 %s 32766 = %d, want -32766", "*", r) } y = 32767 r = x * y if r != 1 { t.Errorf("32767 %s 32767 = %d, want 1", "*", r) } } func TestConstFoldint16mod(t *testing.T) { var x, y, r int16 x = -32768 y = -32768 r = x % y if r != 0 { t.Errorf("-32768 %s -32768 = %d, want 0", "%", r) } y = -32767 r = x % y if r != -1 { t.Errorf("-32768 %s -32767 = %d, want -1", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("-32768 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("-32768 %s 1 = %d, want 0", "%", r) } y = 32766 r = x % y if r != -2 { t.Errorf("-32768 %s 32766 = %d, want -2", "%", r) } y = 32767 r = x % y if r != -1 { t.Errorf("-32768 %s 32767 = %d, want -1", "%", r) } x = -32767 y = -32768 r = x % y if r != -32767 { t.Errorf("-32767 %s -32768 = %d, want -32767", "%", r) } y = -32767 r = x % y if r != 0 { t.Errorf("-32767 %s -32767 = %d, want 0", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("-32767 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("-32767 %s 1 = %d, want 0", "%", r) } y = 32766 r = x % y if r != -1 { t.Errorf("-32767 %s 32766 = %d, want -1", "%", r) } y = 32767 r = x % y if r != 0 { t.Errorf("-32767 %s 32767 = %d, want 0", "%", r) } x = -1 y = -32768 r = x % y if r != -1 { t.Errorf("-1 %s -32768 = %d, want -1", "%", r) } y = -32767 r = x % y if r != -1 { t.Errorf("-1 %s -32767 = %d, want -1", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("-1 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("-1 %s 1 = %d, want 0", "%", r) } y = 32766 r = x % y if r != -1 { t.Errorf("-1 %s 32766 = %d, want -1", "%", r) } y = 32767 r = x % y if r != -1 { t.Errorf("-1 %s 32767 = %d, want -1", "%", r) } x = 0 y = -32768 r = x % y if r != 0 { t.Errorf("0 %s -32768 = %d, want 0", "%", r) } y = -32767 r = x % y if r != 0 { t.Errorf("0 %s -32767 = %d, want 0", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("0 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "%", r) } y = 32766 r = x % y if r != 0 { t.Errorf("0 %s 32766 = %d, want 0", "%", r) } y = 32767 r = x % y if r != 0 { t.Errorf("0 %s 32767 = %d, want 0", "%", r) } x = 1 y = -32768 r = x % y if r != 1 { t.Errorf("1 %s -32768 = %d, want 1", "%", r) } y = -32767 r = x % y if r != 1 { t.Errorf("1 %s -32767 = %d, want 1", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("1 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", "%", r) } y = 32766 r = x % y if r != 1 { t.Errorf("1 %s 32766 = %d, want 1", "%", r) } y = 32767 r = x % y if r != 1 { t.Errorf("1 %s 32767 = %d, want 1", "%", r) } x = 32766 y = -32768 r = x % y if r != 32766 { t.Errorf("32766 %s -32768 = %d, want 32766", "%", r) } y = -32767 r = x % y if r != 32766 { t.Errorf("32766 %s -32767 = %d, want 32766", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("32766 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("32766 %s 1 = %d, want 0", "%", r) } y = 32766 r = x % y if r != 0 { t.Errorf("32766 %s 32766 = %d, want 0", "%", r) } y = 32767 r = x % y if r != 32766 { t.Errorf("32766 %s 32767 = %d, want 32766", "%", r) } x = 32767 y = -32768 r = x % y if r != 32767 { t.Errorf("32767 %s -32768 = %d, want 32767", "%", r) } y = -32767 r = x % y if r != 0 { t.Errorf("32767 %s -32767 = %d, want 0", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("32767 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("32767 %s 1 = %d, want 0", "%", r) } y = 32766 r = x % y if r != 1 { t.Errorf("32767 %s 32766 = %d, want 1", "%", r) } y = 32767 r = x % y if r != 0 { t.Errorf("32767 %s 32767 = %d, want 0", "%", r) } } func TestConstFolduint8add(t *testing.T) { var x, y, r uint8 x = 0 y = 0 r = x + y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "+", r) } y = 1 r = x + y if r != 1 { t.Errorf("0 %s 1 = %d, want 1", "+", r) } y = 255 r = x + y if r != 255 { t.Errorf("0 %s 255 = %d, want 255", "+", r) } x = 1 y = 0 r = x + y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "+", r) } y = 1 r = x + y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "+", r) } y = 255 r = x + y if r != 0 { t.Errorf("1 %s 255 = %d, want 0", "+", r) } x = 255 y = 0 r = x + y if r != 255 { t.Errorf("255 %s 0 = %d, want 255", "+", r) } y = 1 r = x + y if r != 0 { t.Errorf("255 %s 1 = %d, want 0", "+", r) } y = 255 r = x + y if r != 254 { t.Errorf("255 %s 255 = %d, want 254", "+", r) } } func TestConstFolduint8sub(t *testing.T) { var x, y, r uint8 x = 0 y = 0 r = x - y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "-", r) } y = 1 r = x - y if r != 255 { t.Errorf("0 %s 1 = %d, want 255", "-", r) } y = 255 r = x - y if r != 1 { t.Errorf("0 %s 255 = %d, want 1", "-", r) } x = 1 y = 0 r = x - y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "-", r) } y = 1 r = x - y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", "-", r) } y = 255 r = x - y if r != 2 { t.Errorf("1 %s 255 = %d, want 2", "-", r) } x = 255 y = 0 r = x - y if r != 255 { t.Errorf("255 %s 0 = %d, want 255", "-", r) } y = 1 r = x - y if r != 254 { t.Errorf("255 %s 1 = %d, want 254", "-", r) } y = 255 r = x - y if r != 0 { t.Errorf("255 %s 255 = %d, want 0", "-", r) } } func TestConstFolduint8div(t *testing.T) { var x, y, r uint8 x = 0 y = 1 r = x / y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "/", r) } y = 255 r = x / y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", "/", r) } x = 1 y = 1 r = x / y if r != 1 { t.Errorf("1 %s 1 = %d, want 1", "/", r) } y = 255 r = x / y if r != 0 { t.Errorf("1 %s 255 = %d, want 0", "/", r) } x = 255 y = 1 r = x / y if r != 255 { t.Errorf("255 %s 1 = %d, want 255", "/", r) } y = 255 r = x / y if r != 1 { t.Errorf("255 %s 255 = %d, want 1", "/", r) } } func TestConstFolduint8mul(t *testing.T) { var x, y, r uint8 x = 0 y = 0 r = x * y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "*", r) } y = 255 r = x * y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", "*", r) } x = 1 y = 0 r = x * y if r != 0 { t.Errorf("1 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 1 { t.Errorf("1 %s 1 = %d, want 1", "*", r) } y = 255 r = x * y if r != 255 { t.Errorf("1 %s 255 = %d, want 255", "*", r) } x = 255 y = 0 r = x * y if r != 0 { t.Errorf("255 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 255 { t.Errorf("255 %s 1 = %d, want 255", "*", r) } y = 255 r = x * y if r != 1 { t.Errorf("255 %s 255 = %d, want 1", "*", r) } } func TestConstFolduint8mod(t *testing.T) { var x, y, r uint8 x = 0 y = 1 r = x % y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "%", r) } y = 255 r = x % y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", "%", r) } x = 1 y = 1 r = x % y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", "%", r) } y = 255 r = x % y if r != 1 { t.Errorf("1 %s 255 = %d, want 1", "%", r) } x = 255 y = 1 r = x % y if r != 0 { t.Errorf("255 %s 1 = %d, want 0", "%", r) } y = 255 r = x % y if r != 0 { t.Errorf("255 %s 255 = %d, want 0", "%", r) } } func TestConstFoldint8add(t *testing.T) { var x, y, r int8 x = -128 y = -128 r = x + y if r != 0 { t.Errorf("-128 %s -128 = %d, want 0", "+", r) } y = -127 r = x + y if r != 1 { t.Errorf("-128 %s -127 = %d, want 1", "+", r) } y = -1 r = x + y if r != 127 { t.Errorf("-128 %s -1 = %d, want 127", "+", r) } y = 0 r = x + y if r != -128 { t.Errorf("-128 %s 0 = %d, want -128", "+", r) } y = 1 r = x + y if r != -127 { t.Errorf("-128 %s 1 = %d, want -127", "+", r) } y = 126 r = x + y if r != -2 { t.Errorf("-128 %s 126 = %d, want -2", "+", r) } y = 127 r = x + y if r != -1 { t.Errorf("-128 %s 127 = %d, want -1", "+", r) } x = -127 y = -128 r = x + y if r != 1 { t.Errorf("-127 %s -128 = %d, want 1", "+", r) } y = -127 r = x + y if r != 2 { t.Errorf("-127 %s -127 = %d, want 2", "+", r) } y = -1 r = x + y if r != -128 { t.Errorf("-127 %s -1 = %d, want -128", "+", r) } y = 0 r = x + y if r != -127 { t.Errorf("-127 %s 0 = %d, want -127", "+", r) } y = 1 r = x + y if r != -126 { t.Errorf("-127 %s 1 = %d, want -126", "+", r) } y = 126 r = x + y if r != -1 { t.Errorf("-127 %s 126 = %d, want -1", "+", r) } y = 127 r = x + y if r != 0 { t.Errorf("-127 %s 127 = %d, want 0", "+", r) } x = -1 y = -128 r = x + y if r != 127 { t.Errorf("-1 %s -128 = %d, want 127", "+", r) } y = -127 r = x + y if r != -128 { t.Errorf("-1 %s -127 = %d, want -128", "+", r) } y = -1 r = x + y if r != -2 { t.Errorf("-1 %s -1 = %d, want -2", "+", r) } y = 0 r = x + y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "+", r) } y = 1 r = x + y if r != 0 { t.Errorf("-1 %s 1 = %d, want 0", "+", r) } y = 126 r = x + y if r != 125 { t.Errorf("-1 %s 126 = %d, want 125", "+", r) } y = 127 r = x + y if r != 126 { t.Errorf("-1 %s 127 = %d, want 126", "+", r) } x = 0 y = -128 r = x + y if r != -128 { t.Errorf("0 %s -128 = %d, want -128", "+", r) } y = -127 r = x + y if r != -127 { t.Errorf("0 %s -127 = %d, want -127", "+", r) } y = -1 r = x + y if r != -1 { t.Errorf("0 %s -1 = %d, want -1", "+", r) } y = 0 r = x + y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "+", r) } y = 1 r = x + y if r != 1 { t.Errorf("0 %s 1 = %d, want 1", "+", r) } y = 126 r = x + y if r != 126 { t.Errorf("0 %s 126 = %d, want 126", "+", r) } y = 127 r = x + y if r != 127 { t.Errorf("0 %s 127 = %d, want 127", "+", r) } x = 1 y = -128 r = x + y if r != -127 { t.Errorf("1 %s -128 = %d, want -127", "+", r) } y = -127 r = x + y if r != -126 { t.Errorf("1 %s -127 = %d, want -126", "+", r) } y = -1 r = x + y if r != 0 { t.Errorf("1 %s -1 = %d, want 0", "+", r) } y = 0 r = x + y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "+", r) } y = 1 r = x + y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "+", r) } y = 126 r = x + y if r != 127 { t.Errorf("1 %s 126 = %d, want 127", "+", r) } y = 127 r = x + y if r != -128 { t.Errorf("1 %s 127 = %d, want -128", "+", r) } x = 126 y = -128 r = x + y if r != -2 { t.Errorf("126 %s -128 = %d, want -2", "+", r) } y = -127 r = x + y if r != -1 { t.Errorf("126 %s -127 = %d, want -1", "+", r) } y = -1 r = x + y if r != 125 { t.Errorf("126 %s -1 = %d, want 125", "+", r) } y = 0 r = x + y if r != 126 { t.Errorf("126 %s 0 = %d, want 126", "+", r) } y = 1 r = x + y if r != 127 { t.Errorf("126 %s 1 = %d, want 127", "+", r) } y = 126 r = x + y if r != -4 { t.Errorf("126 %s 126 = %d, want -4", "+", r) } y = 127 r = x + y if r != -3 { t.Errorf("126 %s 127 = %d, want -3", "+", r) } x = 127 y = -128 r = x + y if r != -1 { t.Errorf("127 %s -128 = %d, want -1", "+", r) } y = -127 r = x + y if r != 0 { t.Errorf("127 %s -127 = %d, want 0", "+", r) } y = -1 r = x + y if r != 126 { t.Errorf("127 %s -1 = %d, want 126", "+", r) } y = 0 r = x + y if r != 127 { t.Errorf("127 %s 0 = %d, want 127", "+", r) } y = 1 r = x + y if r != -128 { t.Errorf("127 %s 1 = %d, want -128", "+", r) } y = 126 r = x + y if r != -3 { t.Errorf("127 %s 126 = %d, want -3", "+", r) } y = 127 r = x + y if r != -2 { t.Errorf("127 %s 127 = %d, want -2", "+", r) } } func TestConstFoldint8sub(t *testing.T) { var x, y, r int8 x = -128 y = -128 r = x - y if r != 0 { t.Errorf("-128 %s -128 = %d, want 0", "-", r) } y = -127 r = x - y if r != -1 { t.Errorf("-128 %s -127 = %d, want -1", "-", r) } y = -1 r = x - y if r != -127 { t.Errorf("-128 %s -1 = %d, want -127", "-", r) } y = 0 r = x - y if r != -128 { t.Errorf("-128 %s 0 = %d, want -128", "-", r) } y = 1 r = x - y if r != 127 { t.Errorf("-128 %s 1 = %d, want 127", "-", r) } y = 126 r = x - y if r != 2 { t.Errorf("-128 %s 126 = %d, want 2", "-", r) } y = 127 r = x - y if r != 1 { t.Errorf("-128 %s 127 = %d, want 1", "-", r) } x = -127 y = -128 r = x - y if r != 1 { t.Errorf("-127 %s -128 = %d, want 1", "-", r) } y = -127 r = x - y if r != 0 { t.Errorf("-127 %s -127 = %d, want 0", "-", r) } y = -1 r = x - y if r != -126 { t.Errorf("-127 %s -1 = %d, want -126", "-", r) } y = 0 r = x - y if r != -127 { t.Errorf("-127 %s 0 = %d, want -127", "-", r) } y = 1 r = x - y if r != -128 { t.Errorf("-127 %s 1 = %d, want -128", "-", r) } y = 126 r = x - y if r != 3 { t.Errorf("-127 %s 126 = %d, want 3", "-", r) } y = 127 r = x - y if r != 2 { t.Errorf("-127 %s 127 = %d, want 2", "-", r) } x = -1 y = -128 r = x - y if r != 127 { t.Errorf("-1 %s -128 = %d, want 127", "-", r) } y = -127 r = x - y if r != 126 { t.Errorf("-1 %s -127 = %d, want 126", "-", r) } y = -1 r = x - y if r != 0 { t.Errorf("-1 %s -1 = %d, want 0", "-", r) } y = 0 r = x - y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "-", r) } y = 1 r = x - y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "-", r) } y = 126 r = x - y if r != -127 { t.Errorf("-1 %s 126 = %d, want -127", "-", r) } y = 127 r = x - y if r != -128 { t.Errorf("-1 %s 127 = %d, want -128", "-", r) } x = 0 y = -128 r = x - y if r != -128 { t.Errorf("0 %s -128 = %d, want -128", "-", r) } y = -127 r = x - y if r != 127 { t.Errorf("0 %s -127 = %d, want 127", "-", r) } y = -1 r = x - y if r != 1 { t.Errorf("0 %s -1 = %d, want 1", "-", r) } y = 0 r = x - y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "-", r) } y = 1 r = x - y if r != -1 { t.Errorf("0 %s 1 = %d, want -1", "-", r) } y = 126 r = x - y if r != -126 { t.Errorf("0 %s 126 = %d, want -126", "-", r) } y = 127 r = x - y if r != -127 { t.Errorf("0 %s 127 = %d, want -127", "-", r) } x = 1 y = -128 r = x - y if r != -127 { t.Errorf("1 %s -128 = %d, want -127", "-", r) } y = -127 r = x - y if r != -128 { t.Errorf("1 %s -127 = %d, want -128", "-", r) } y = -1 r = x - y if r != 2 { t.Errorf("1 %s -1 = %d, want 2", "-", r) } y = 0 r = x - y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "-", r) } y = 1 r = x - y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", "-", r) } y = 126 r = x - y if r != -125 { t.Errorf("1 %s 126 = %d, want -125", "-", r) } y = 127 r = x - y if r != -126 { t.Errorf("1 %s 127 = %d, want -126", "-", r) } x = 126 y = -128 r = x - y if r != -2 { t.Errorf("126 %s -128 = %d, want -2", "-", r) } y = -127 r = x - y if r != -3 { t.Errorf("126 %s -127 = %d, want -3", "-", r) } y = -1 r = x - y if r != 127 { t.Errorf("126 %s -1 = %d, want 127", "-", r) } y = 0 r = x - y if r != 126 { t.Errorf("126 %s 0 = %d, want 126", "-", r) } y = 1 r = x - y if r != 125 { t.Errorf("126 %s 1 = %d, want 125", "-", r) } y = 126 r = x - y if r != 0 { t.Errorf("126 %s 126 = %d, want 0", "-", r) } y = 127 r = x - y if r != -1 { t.Errorf("126 %s 127 = %d, want -1", "-", r) } x = 127 y = -128 r = x - y if r != -1 { t.Errorf("127 %s -128 = %d, want -1", "-", r) } y = -127 r = x - y if r != -2 { t.Errorf("127 %s -127 = %d, want -2", "-", r) } y = -1 r = x - y if r != -128 { t.Errorf("127 %s -1 = %d, want -128", "-", r) } y = 0 r = x - y if r != 127 { t.Errorf("127 %s 0 = %d, want 127", "-", r) } y = 1 r = x - y if r != 126 { t.Errorf("127 %s 1 = %d, want 126", "-", r) } y = 126 r = x - y if r != 1 { t.Errorf("127 %s 126 = %d, want 1", "-", r) } y = 127 r = x - y if r != 0 { t.Errorf("127 %s 127 = %d, want 0", "-", r) } } func TestConstFoldint8div(t *testing.T) { var x, y, r int8 x = -128 y = -128 r = x / y if r != 1 { t.Errorf("-128 %s -128 = %d, want 1", "/", r) } y = -127 r = x / y if r != 1 { t.Errorf("-128 %s -127 = %d, want 1", "/", r) } y = -1 r = x / y if r != -128 { t.Errorf("-128 %s -1 = %d, want -128", "/", r) } y = 1 r = x / y if r != -128 { t.Errorf("-128 %s 1 = %d, want -128", "/", r) } y = 126 r = x / y if r != -1 { t.Errorf("-128 %s 126 = %d, want -1", "/", r) } y = 127 r = x / y if r != -1 { t.Errorf("-128 %s 127 = %d, want -1", "/", r) } x = -127 y = -128 r = x / y if r != 0 { t.Errorf("-127 %s -128 = %d, want 0", "/", r) } y = -127 r = x / y if r != 1 { t.Errorf("-127 %s -127 = %d, want 1", "/", r) } y = -1 r = x / y if r != 127 { t.Errorf("-127 %s -1 = %d, want 127", "/", r) } y = 1 r = x / y if r != -127 { t.Errorf("-127 %s 1 = %d, want -127", "/", r) } y = 126 r = x / y if r != -1 { t.Errorf("-127 %s 126 = %d, want -1", "/", r) } y = 127 r = x / y if r != -1 { t.Errorf("-127 %s 127 = %d, want -1", "/", r) } x = -1 y = -128 r = x / y if r != 0 { t.Errorf("-1 %s -128 = %d, want 0", "/", r) } y = -127 r = x / y if r != 0 { t.Errorf("-1 %s -127 = %d, want 0", "/", r) } y = -1 r = x / y if r != 1 { t.Errorf("-1 %s -1 = %d, want 1", "/", r) } y = 1 r = x / y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", "/", r) } y = 126 r = x / y if r != 0 { t.Errorf("-1 %s 126 = %d, want 0", "/", r) } y = 127 r = x / y if r != 0 { t.Errorf("-1 %s 127 = %d, want 0", "/", r) } x = 0 y = -128 r = x / y if r != 0 { t.Errorf("0 %s -128 = %d, want 0", "/", r) } y = -127 r = x / y if r != 0 { t.Errorf("0 %s -127 = %d, want 0", "/", r) } y = -1 r = x / y if r != 0 { t.Errorf("0 %s -1 = %d, want 0", "/", r) } y = 1 r = x / y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "/", r) } y = 126 r = x / y if r != 0 { t.Errorf("0 %s 126 = %d, want 0", "/", r) } y = 127 r = x / y if r != 0 { t.Errorf("0 %s 127 = %d, want 0", "/", r) } x = 1 y = -128 r = x / y if r != 0 { t.Errorf("1 %s -128 = %d, want 0", "/", r) } y = -127 r = x / y if r != 0 { t.Errorf("1 %s -127 = %d, want 0", "/", r) } y = -1 r = x / y if r != -1 { t.Errorf("1 %s -1 = %d, want -1", "/", r) } y = 1 r = x / y if r != 1 { t.Errorf("1 %s 1 = %d, want 1", "/", r) } y = 126 r = x / y if r != 0 { t.Errorf("1 %s 126 = %d, want 0", "/", r) } y = 127 r = x / y if r != 0 { t.Errorf("1 %s 127 = %d, want 0", "/", r) } x = 126 y = -128 r = x / y if r != 0 { t.Errorf("126 %s -128 = %d, want 0", "/", r) } y = -127 r = x / y if r != 0 { t.Errorf("126 %s -127 = %d, want 0", "/", r) } y = -1 r = x / y if r != -126 { t.Errorf("126 %s -1 = %d, want -126", "/", r) } y = 1 r = x / y if r != 126 { t.Errorf("126 %s 1 = %d, want 126", "/", r) } y = 126 r = x / y if r != 1 { t.Errorf("126 %s 126 = %d, want 1", "/", r) } y = 127 r = x / y if r != 0 { t.Errorf("126 %s 127 = %d, want 0", "/", r) } x = 127 y = -128 r = x / y if r != 0 { t.Errorf("127 %s -128 = %d, want 0", "/", r) } y = -127 r = x / y if r != -1 { t.Errorf("127 %s -127 = %d, want -1", "/", r) } y = -1 r = x / y if r != -127 { t.Errorf("127 %s -1 = %d, want -127", "/", r) } y = 1 r = x / y if r != 127 { t.Errorf("127 %s 1 = %d, want 127", "/", r) } y = 126 r = x / y if r != 1 { t.Errorf("127 %s 126 = %d, want 1", "/", r) } y = 127 r = x / y if r != 1 { t.Errorf("127 %s 127 = %d, want 1", "/", r) } } func TestConstFoldint8mul(t *testing.T) { var x, y, r int8 x = -128 y = -128 r = x * y if r != 0 { t.Errorf("-128 %s -128 = %d, want 0", "*", r) } y = -127 r = x * y if r != -128 { t.Errorf("-128 %s -127 = %d, want -128", "*", r) } y = -1 r = x * y if r != -128 { t.Errorf("-128 %s -1 = %d, want -128", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("-128 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != -128 { t.Errorf("-128 %s 1 = %d, want -128", "*", r) } y = 126 r = x * y if r != 0 { t.Errorf("-128 %s 126 = %d, want 0", "*", r) } y = 127 r = x * y if r != -128 { t.Errorf("-128 %s 127 = %d, want -128", "*", r) } x = -127 y = -128 r = x * y if r != -128 { t.Errorf("-127 %s -128 = %d, want -128", "*", r) } y = -127 r = x * y if r != 1 { t.Errorf("-127 %s -127 = %d, want 1", "*", r) } y = -1 r = x * y if r != 127 { t.Errorf("-127 %s -1 = %d, want 127", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("-127 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != -127 { t.Errorf("-127 %s 1 = %d, want -127", "*", r) } y = 126 r = x * y if r != 126 { t.Errorf("-127 %s 126 = %d, want 126", "*", r) } y = 127 r = x * y if r != -1 { t.Errorf("-127 %s 127 = %d, want -1", "*", r) } x = -1 y = -128 r = x * y if r != -128 { t.Errorf("-1 %s -128 = %d, want -128", "*", r) } y = -127 r = x * y if r != 127 { t.Errorf("-1 %s -127 = %d, want 127", "*", r) } y = -1 r = x * y if r != 1 { t.Errorf("-1 %s -1 = %d, want 1", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("-1 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", "*", r) } y = 126 r = x * y if r != -126 { t.Errorf("-1 %s 126 = %d, want -126", "*", r) } y = 127 r = x * y if r != -127 { t.Errorf("-1 %s 127 = %d, want -127", "*", r) } x = 0 y = -128 r = x * y if r != 0 { t.Errorf("0 %s -128 = %d, want 0", "*", r) } y = -127 r = x * y if r != 0 { t.Errorf("0 %s -127 = %d, want 0", "*", r) } y = -1 r = x * y if r != 0 { t.Errorf("0 %s -1 = %d, want 0", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "*", r) } y = 126 r = x * y if r != 0 { t.Errorf("0 %s 126 = %d, want 0", "*", r) } y = 127 r = x * y if r != 0 { t.Errorf("0 %s 127 = %d, want 0", "*", r) } x = 1 y = -128 r = x * y if r != -128 { t.Errorf("1 %s -128 = %d, want -128", "*", r) } y = -127 r = x * y if r != -127 { t.Errorf("1 %s -127 = %d, want -127", "*", r) } y = -1 r = x * y if r != -1 { t.Errorf("1 %s -1 = %d, want -1", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("1 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 1 { t.Errorf("1 %s 1 = %d, want 1", "*", r) } y = 126 r = x * y if r != 126 { t.Errorf("1 %s 126 = %d, want 126", "*", r) } y = 127 r = x * y if r != 127 { t.Errorf("1 %s 127 = %d, want 127", "*", r) } x = 126 y = -128 r = x * y if r != 0 { t.Errorf("126 %s -128 = %d, want 0", "*", r) } y = -127 r = x * y if r != 126 { t.Errorf("126 %s -127 = %d, want 126", "*", r) } y = -1 r = x * y if r != -126 { t.Errorf("126 %s -1 = %d, want -126", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("126 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 126 { t.Errorf("126 %s 1 = %d, want 126", "*", r) } y = 126 r = x * y if r != 4 { t.Errorf("126 %s 126 = %d, want 4", "*", r) } y = 127 r = x * y if r != -126 { t.Errorf("126 %s 127 = %d, want -126", "*", r) } x = 127 y = -128 r = x * y if r != -128 { t.Errorf("127 %s -128 = %d, want -128", "*", r) } y = -127 r = x * y if r != -1 { t.Errorf("127 %s -127 = %d, want -1", "*", r) } y = -1 r = x * y if r != -127 { t.Errorf("127 %s -1 = %d, want -127", "*", r) } y = 0 r = x * y if r != 0 { t.Errorf("127 %s 0 = %d, want 0", "*", r) } y = 1 r = x * y if r != 127 { t.Errorf("127 %s 1 = %d, want 127", "*", r) } y = 126 r = x * y if r != -126 { t.Errorf("127 %s 126 = %d, want -126", "*", r) } y = 127 r = x * y if r != 1 { t.Errorf("127 %s 127 = %d, want 1", "*", r) } } func TestConstFoldint8mod(t *testing.T) { var x, y, r int8 x = -128 y = -128 r = x % y if r != 0 { t.Errorf("-128 %s -128 = %d, want 0", "%", r) } y = -127 r = x % y if r != -1 { t.Errorf("-128 %s -127 = %d, want -1", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("-128 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("-128 %s 1 = %d, want 0", "%", r) } y = 126 r = x % y if r != -2 { t.Errorf("-128 %s 126 = %d, want -2", "%", r) } y = 127 r = x % y if r != -1 { t.Errorf("-128 %s 127 = %d, want -1", "%", r) } x = -127 y = -128 r = x % y if r != -127 { t.Errorf("-127 %s -128 = %d, want -127", "%", r) } y = -127 r = x % y if r != 0 { t.Errorf("-127 %s -127 = %d, want 0", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("-127 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("-127 %s 1 = %d, want 0", "%", r) } y = 126 r = x % y if r != -1 { t.Errorf("-127 %s 126 = %d, want -1", "%", r) } y = 127 r = x % y if r != 0 { t.Errorf("-127 %s 127 = %d, want 0", "%", r) } x = -1 y = -128 r = x % y if r != -1 { t.Errorf("-1 %s -128 = %d, want -1", "%", r) } y = -127 r = x % y if r != -1 { t.Errorf("-1 %s -127 = %d, want -1", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("-1 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("-1 %s 1 = %d, want 0", "%", r) } y = 126 r = x % y if r != -1 { t.Errorf("-1 %s 126 = %d, want -1", "%", r) } y = 127 r = x % y if r != -1 { t.Errorf("-1 %s 127 = %d, want -1", "%", r) } x = 0 y = -128 r = x % y if r != 0 { t.Errorf("0 %s -128 = %d, want 0", "%", r) } y = -127 r = x % y if r != 0 { t.Errorf("0 %s -127 = %d, want 0", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("0 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "%", r) } y = 126 r = x % y if r != 0 { t.Errorf("0 %s 126 = %d, want 0", "%", r) } y = 127 r = x % y if r != 0 { t.Errorf("0 %s 127 = %d, want 0", "%", r) } x = 1 y = -128 r = x % y if r != 1 { t.Errorf("1 %s -128 = %d, want 1", "%", r) } y = -127 r = x % y if r != 1 { t.Errorf("1 %s -127 = %d, want 1", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("1 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", "%", r) } y = 126 r = x % y if r != 1 { t.Errorf("1 %s 126 = %d, want 1", "%", r) } y = 127 r = x % y if r != 1 { t.Errorf("1 %s 127 = %d, want 1", "%", r) } x = 126 y = -128 r = x % y if r != 126 { t.Errorf("126 %s -128 = %d, want 126", "%", r) } y = -127 r = x % y if r != 126 { t.Errorf("126 %s -127 = %d, want 126", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("126 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("126 %s 1 = %d, want 0", "%", r) } y = 126 r = x % y if r != 0 { t.Errorf("126 %s 126 = %d, want 0", "%", r) } y = 127 r = x % y if r != 126 { t.Errorf("126 %s 127 = %d, want 126", "%", r) } x = 127 y = -128 r = x % y if r != 127 { t.Errorf("127 %s -128 = %d, want 127", "%", r) } y = -127 r = x % y if r != 0 { t.Errorf("127 %s -127 = %d, want 0", "%", r) } y = -1 r = x % y if r != 0 { t.Errorf("127 %s -1 = %d, want 0", "%", r) } y = 1 r = x % y if r != 0 { t.Errorf("127 %s 1 = %d, want 0", "%", r) } y = 126 r = x % y if r != 1 { t.Errorf("127 %s 126 = %d, want 1", "%", r) } y = 127 r = x % y if r != 0 { t.Errorf("127 %s 127 = %d, want 0", "%", r) } } func TestConstFolduint64uint64lsh(t *testing.T) { var x, r uint64 var y uint64 x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("1 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("1 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 4294967296 y = 0 r = x << y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", "<<", r) } y = 1 r = x << y if r != 8589934592 { t.Errorf("4294967296 %s 1 = %d, want 8589934592", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("4294967296 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("4294967296 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 18446744073709551615 y = 0 r = x << y if r != 18446744073709551615 { t.Errorf("18446744073709551615 %s 0 = %d, want 18446744073709551615", "<<", r) } y = 1 r = x << y if r != 18446744073709551614 { t.Errorf("18446744073709551615 %s 1 = %d, want 18446744073709551614", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("18446744073709551615 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("18446744073709551615 %s 18446744073709551615 = %d, want 0", "<<", r) } } func TestConstFolduint64uint64rsh(t *testing.T) { var x, r uint64 var y uint64 x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("1 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("1 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 4294967296 y = 0 r = x >> y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", ">>", r) } y = 1 r = x >> y if r != 2147483648 { t.Errorf("4294967296 %s 1 = %d, want 2147483648", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("4294967296 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("4294967296 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 18446744073709551615 y = 0 r = x >> y if r != 18446744073709551615 { t.Errorf("18446744073709551615 %s 0 = %d, want 18446744073709551615", ">>", r) } y = 1 r = x >> y if r != 9223372036854775807 { t.Errorf("18446744073709551615 %s 1 = %d, want 9223372036854775807", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("18446744073709551615 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("18446744073709551615 %s 18446744073709551615 = %d, want 0", ">>", r) } } func TestConstFolduint64uint32lsh(t *testing.T) { var x, r uint64 var y uint32 x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("1 %s 4294967295 = %d, want 0", "<<", r) } x = 4294967296 y = 0 r = x << y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", "<<", r) } y = 1 r = x << y if r != 8589934592 { t.Errorf("4294967296 %s 1 = %d, want 8589934592", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("4294967296 %s 4294967295 = %d, want 0", "<<", r) } x = 18446744073709551615 y = 0 r = x << y if r != 18446744073709551615 { t.Errorf("18446744073709551615 %s 0 = %d, want 18446744073709551615", "<<", r) } y = 1 r = x << y if r != 18446744073709551614 { t.Errorf("18446744073709551615 %s 1 = %d, want 18446744073709551614", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("18446744073709551615 %s 4294967295 = %d, want 0", "<<", r) } } func TestConstFolduint64uint32rsh(t *testing.T) { var x, r uint64 var y uint32 x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("1 %s 4294967295 = %d, want 0", ">>", r) } x = 4294967296 y = 0 r = x >> y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", ">>", r) } y = 1 r = x >> y if r != 2147483648 { t.Errorf("4294967296 %s 1 = %d, want 2147483648", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("4294967296 %s 4294967295 = %d, want 0", ">>", r) } x = 18446744073709551615 y = 0 r = x >> y if r != 18446744073709551615 { t.Errorf("18446744073709551615 %s 0 = %d, want 18446744073709551615", ">>", r) } y = 1 r = x >> y if r != 9223372036854775807 { t.Errorf("18446744073709551615 %s 1 = %d, want 9223372036854775807", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("18446744073709551615 %s 4294967295 = %d, want 0", ">>", r) } } func TestConstFolduint64uint16lsh(t *testing.T) { var x, r uint64 var y uint16 x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("1 %s 65535 = %d, want 0", "<<", r) } x = 4294967296 y = 0 r = x << y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", "<<", r) } y = 1 r = x << y if r != 8589934592 { t.Errorf("4294967296 %s 1 = %d, want 8589934592", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("4294967296 %s 65535 = %d, want 0", "<<", r) } x = 18446744073709551615 y = 0 r = x << y if r != 18446744073709551615 { t.Errorf("18446744073709551615 %s 0 = %d, want 18446744073709551615", "<<", r) } y = 1 r = x << y if r != 18446744073709551614 { t.Errorf("18446744073709551615 %s 1 = %d, want 18446744073709551614", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("18446744073709551615 %s 65535 = %d, want 0", "<<", r) } } func TestConstFolduint64uint16rsh(t *testing.T) { var x, r uint64 var y uint16 x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("1 %s 65535 = %d, want 0", ">>", r) } x = 4294967296 y = 0 r = x >> y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", ">>", r) } y = 1 r = x >> y if r != 2147483648 { t.Errorf("4294967296 %s 1 = %d, want 2147483648", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("4294967296 %s 65535 = %d, want 0", ">>", r) } x = 18446744073709551615 y = 0 r = x >> y if r != 18446744073709551615 { t.Errorf("18446744073709551615 %s 0 = %d, want 18446744073709551615", ">>", r) } y = 1 r = x >> y if r != 9223372036854775807 { t.Errorf("18446744073709551615 %s 1 = %d, want 9223372036854775807", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("18446744073709551615 %s 65535 = %d, want 0", ">>", r) } } func TestConstFolduint64uint8lsh(t *testing.T) { var x, r uint64 var y uint8 x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("1 %s 255 = %d, want 0", "<<", r) } x = 4294967296 y = 0 r = x << y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", "<<", r) } y = 1 r = x << y if r != 8589934592 { t.Errorf("4294967296 %s 1 = %d, want 8589934592", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("4294967296 %s 255 = %d, want 0", "<<", r) } x = 18446744073709551615 y = 0 r = x << y if r != 18446744073709551615 { t.Errorf("18446744073709551615 %s 0 = %d, want 18446744073709551615", "<<", r) } y = 1 r = x << y if r != 18446744073709551614 { t.Errorf("18446744073709551615 %s 1 = %d, want 18446744073709551614", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("18446744073709551615 %s 255 = %d, want 0", "<<", r) } } func TestConstFolduint64uint8rsh(t *testing.T) { var x, r uint64 var y uint8 x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("1 %s 255 = %d, want 0", ">>", r) } x = 4294967296 y = 0 r = x >> y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", ">>", r) } y = 1 r = x >> y if r != 2147483648 { t.Errorf("4294967296 %s 1 = %d, want 2147483648", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("4294967296 %s 255 = %d, want 0", ">>", r) } x = 18446744073709551615 y = 0 r = x >> y if r != 18446744073709551615 { t.Errorf("18446744073709551615 %s 0 = %d, want 18446744073709551615", ">>", r) } y = 1 r = x >> y if r != 9223372036854775807 { t.Errorf("18446744073709551615 %s 1 = %d, want 9223372036854775807", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("18446744073709551615 %s 255 = %d, want 0", ">>", r) } } func TestConstFoldint64uint64lsh(t *testing.T) { var x, r int64 var y uint64 x = -9223372036854775808 y = 0 r = x << y if r != -9223372036854775808 { t.Errorf("-9223372036854775808 %s 0 = %d, want -9223372036854775808", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("-9223372036854775808 %s 1 = %d, want 0", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("-9223372036854775808 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("-9223372036854775808 %s 18446744073709551615 = %d, want 0", "<<", r) } x = -9223372036854775807 y = 0 r = x << y if r != -9223372036854775807 { t.Errorf("-9223372036854775807 %s 0 = %d, want -9223372036854775807", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("-9223372036854775807 %s 1 = %d, want 2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("-9223372036854775807 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("-9223372036854775807 %s 18446744073709551615 = %d, want 0", "<<", r) } x = -4294967296 y = 0 r = x << y if r != -4294967296 { t.Errorf("-4294967296 %s 0 = %d, want -4294967296", "<<", r) } y = 1 r = x << y if r != -8589934592 { t.Errorf("-4294967296 %s 1 = %d, want -8589934592", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("-4294967296 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("-4294967296 %s 18446744073709551615 = %d, want 0", "<<", r) } x = -1 y = 0 r = x << y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("-1 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("-1 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("1 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("1 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 4294967296 y = 0 r = x << y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", "<<", r) } y = 1 r = x << y if r != 8589934592 { t.Errorf("4294967296 %s 1 = %d, want 8589934592", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("4294967296 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("4294967296 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 9223372036854775806 y = 0 r = x << y if r != 9223372036854775806 { t.Errorf("9223372036854775806 %s 0 = %d, want 9223372036854775806", "<<", r) } y = 1 r = x << y if r != -4 { t.Errorf("9223372036854775806 %s 1 = %d, want -4", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("9223372036854775806 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("9223372036854775806 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 9223372036854775807 y = 0 r = x << y if r != 9223372036854775807 { t.Errorf("9223372036854775807 %s 0 = %d, want 9223372036854775807", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("9223372036854775807 %s 1 = %d, want -2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("9223372036854775807 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("9223372036854775807 %s 18446744073709551615 = %d, want 0", "<<", r) } } func TestConstFoldint64uint64rsh(t *testing.T) { var x, r int64 var y uint64 x = -9223372036854775808 y = 0 r = x >> y if r != -9223372036854775808 { t.Errorf("-9223372036854775808 %s 0 = %d, want -9223372036854775808", ">>", r) } y = 1 r = x >> y if r != -4611686018427387904 { t.Errorf("-9223372036854775808 %s 1 = %d, want -4611686018427387904", ">>", r) } y = 4294967296 r = x >> y if r != -1 { t.Errorf("-9223372036854775808 %s 4294967296 = %d, want -1", ">>", r) } y = 18446744073709551615 r = x >> y if r != -1 { t.Errorf("-9223372036854775808 %s 18446744073709551615 = %d, want -1", ">>", r) } x = -9223372036854775807 y = 0 r = x >> y if r != -9223372036854775807 { t.Errorf("-9223372036854775807 %s 0 = %d, want -9223372036854775807", ">>", r) } y = 1 r = x >> y if r != -4611686018427387904 { t.Errorf("-9223372036854775807 %s 1 = %d, want -4611686018427387904", ">>", r) } y = 4294967296 r = x >> y if r != -1 { t.Errorf("-9223372036854775807 %s 4294967296 = %d, want -1", ">>", r) } y = 18446744073709551615 r = x >> y if r != -1 { t.Errorf("-9223372036854775807 %s 18446744073709551615 = %d, want -1", ">>", r) } x = -4294967296 y = 0 r = x >> y if r != -4294967296 { t.Errorf("-4294967296 %s 0 = %d, want -4294967296", ">>", r) } y = 1 r = x >> y if r != -2147483648 { t.Errorf("-4294967296 %s 1 = %d, want -2147483648", ">>", r) } y = 4294967296 r = x >> y if r != -1 { t.Errorf("-4294967296 %s 4294967296 = %d, want -1", ">>", r) } y = 18446744073709551615 r = x >> y if r != -1 { t.Errorf("-4294967296 %s 18446744073709551615 = %d, want -1", ">>", r) } x = -1 y = 0 r = x >> y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", ">>", r) } y = 1 r = x >> y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", ">>", r) } y = 4294967296 r = x >> y if r != -1 { t.Errorf("-1 %s 4294967296 = %d, want -1", ">>", r) } y = 18446744073709551615 r = x >> y if r != -1 { t.Errorf("-1 %s 18446744073709551615 = %d, want -1", ">>", r) } x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("1 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("1 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 4294967296 y = 0 r = x >> y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", ">>", r) } y = 1 r = x >> y if r != 2147483648 { t.Errorf("4294967296 %s 1 = %d, want 2147483648", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("4294967296 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("4294967296 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 9223372036854775806 y = 0 r = x >> y if r != 9223372036854775806 { t.Errorf("9223372036854775806 %s 0 = %d, want 9223372036854775806", ">>", r) } y = 1 r = x >> y if r != 4611686018427387903 { t.Errorf("9223372036854775806 %s 1 = %d, want 4611686018427387903", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("9223372036854775806 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("9223372036854775806 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 9223372036854775807 y = 0 r = x >> y if r != 9223372036854775807 { t.Errorf("9223372036854775807 %s 0 = %d, want 9223372036854775807", ">>", r) } y = 1 r = x >> y if r != 4611686018427387903 { t.Errorf("9223372036854775807 %s 1 = %d, want 4611686018427387903", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("9223372036854775807 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("9223372036854775807 %s 18446744073709551615 = %d, want 0", ">>", r) } } func TestConstFoldint64uint32lsh(t *testing.T) { var x, r int64 var y uint32 x = -9223372036854775808 y = 0 r = x << y if r != -9223372036854775808 { t.Errorf("-9223372036854775808 %s 0 = %d, want -9223372036854775808", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("-9223372036854775808 %s 1 = %d, want 0", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("-9223372036854775808 %s 4294967295 = %d, want 0", "<<", r) } x = -9223372036854775807 y = 0 r = x << y if r != -9223372036854775807 { t.Errorf("-9223372036854775807 %s 0 = %d, want -9223372036854775807", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("-9223372036854775807 %s 1 = %d, want 2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("-9223372036854775807 %s 4294967295 = %d, want 0", "<<", r) } x = -4294967296 y = 0 r = x << y if r != -4294967296 { t.Errorf("-4294967296 %s 0 = %d, want -4294967296", "<<", r) } y = 1 r = x << y if r != -8589934592 { t.Errorf("-4294967296 %s 1 = %d, want -8589934592", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("-4294967296 %s 4294967295 = %d, want 0", "<<", r) } x = -1 y = 0 r = x << y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("-1 %s 4294967295 = %d, want 0", "<<", r) } x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("1 %s 4294967295 = %d, want 0", "<<", r) } x = 4294967296 y = 0 r = x << y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", "<<", r) } y = 1 r = x << y if r != 8589934592 { t.Errorf("4294967296 %s 1 = %d, want 8589934592", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("4294967296 %s 4294967295 = %d, want 0", "<<", r) } x = 9223372036854775806 y = 0 r = x << y if r != 9223372036854775806 { t.Errorf("9223372036854775806 %s 0 = %d, want 9223372036854775806", "<<", r) } y = 1 r = x << y if r != -4 { t.Errorf("9223372036854775806 %s 1 = %d, want -4", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("9223372036854775806 %s 4294967295 = %d, want 0", "<<", r) } x = 9223372036854775807 y = 0 r = x << y if r != 9223372036854775807 { t.Errorf("9223372036854775807 %s 0 = %d, want 9223372036854775807", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("9223372036854775807 %s 1 = %d, want -2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("9223372036854775807 %s 4294967295 = %d, want 0", "<<", r) } } func TestConstFoldint64uint32rsh(t *testing.T) { var x, r int64 var y uint32 x = -9223372036854775808 y = 0 r = x >> y if r != -9223372036854775808 { t.Errorf("-9223372036854775808 %s 0 = %d, want -9223372036854775808", ">>", r) } y = 1 r = x >> y if r != -4611686018427387904 { t.Errorf("-9223372036854775808 %s 1 = %d, want -4611686018427387904", ">>", r) } y = 4294967295 r = x >> y if r != -1 { t.Errorf("-9223372036854775808 %s 4294967295 = %d, want -1", ">>", r) } x = -9223372036854775807 y = 0 r = x >> y if r != -9223372036854775807 { t.Errorf("-9223372036854775807 %s 0 = %d, want -9223372036854775807", ">>", r) } y = 1 r = x >> y if r != -4611686018427387904 { t.Errorf("-9223372036854775807 %s 1 = %d, want -4611686018427387904", ">>", r) } y = 4294967295 r = x >> y if r != -1 { t.Errorf("-9223372036854775807 %s 4294967295 = %d, want -1", ">>", r) } x = -4294967296 y = 0 r = x >> y if r != -4294967296 { t.Errorf("-4294967296 %s 0 = %d, want -4294967296", ">>", r) } y = 1 r = x >> y if r != -2147483648 { t.Errorf("-4294967296 %s 1 = %d, want -2147483648", ">>", r) } y = 4294967295 r = x >> y if r != -1 { t.Errorf("-4294967296 %s 4294967295 = %d, want -1", ">>", r) } x = -1 y = 0 r = x >> y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", ">>", r) } y = 1 r = x >> y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", ">>", r) } y = 4294967295 r = x >> y if r != -1 { t.Errorf("-1 %s 4294967295 = %d, want -1", ">>", r) } x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("1 %s 4294967295 = %d, want 0", ">>", r) } x = 4294967296 y = 0 r = x >> y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", ">>", r) } y = 1 r = x >> y if r != 2147483648 { t.Errorf("4294967296 %s 1 = %d, want 2147483648", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("4294967296 %s 4294967295 = %d, want 0", ">>", r) } x = 9223372036854775806 y = 0 r = x >> y if r != 9223372036854775806 { t.Errorf("9223372036854775806 %s 0 = %d, want 9223372036854775806", ">>", r) } y = 1 r = x >> y if r != 4611686018427387903 { t.Errorf("9223372036854775806 %s 1 = %d, want 4611686018427387903", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("9223372036854775806 %s 4294967295 = %d, want 0", ">>", r) } x = 9223372036854775807 y = 0 r = x >> y if r != 9223372036854775807 { t.Errorf("9223372036854775807 %s 0 = %d, want 9223372036854775807", ">>", r) } y = 1 r = x >> y if r != 4611686018427387903 { t.Errorf("9223372036854775807 %s 1 = %d, want 4611686018427387903", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("9223372036854775807 %s 4294967295 = %d, want 0", ">>", r) } } func TestConstFoldint64uint16lsh(t *testing.T) { var x, r int64 var y uint16 x = -9223372036854775808 y = 0 r = x << y if r != -9223372036854775808 { t.Errorf("-9223372036854775808 %s 0 = %d, want -9223372036854775808", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("-9223372036854775808 %s 1 = %d, want 0", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("-9223372036854775808 %s 65535 = %d, want 0", "<<", r) } x = -9223372036854775807 y = 0 r = x << y if r != -9223372036854775807 { t.Errorf("-9223372036854775807 %s 0 = %d, want -9223372036854775807", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("-9223372036854775807 %s 1 = %d, want 2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("-9223372036854775807 %s 65535 = %d, want 0", "<<", r) } x = -4294967296 y = 0 r = x << y if r != -4294967296 { t.Errorf("-4294967296 %s 0 = %d, want -4294967296", "<<", r) } y = 1 r = x << y if r != -8589934592 { t.Errorf("-4294967296 %s 1 = %d, want -8589934592", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("-4294967296 %s 65535 = %d, want 0", "<<", r) } x = -1 y = 0 r = x << y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("-1 %s 65535 = %d, want 0", "<<", r) } x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("1 %s 65535 = %d, want 0", "<<", r) } x = 4294967296 y = 0 r = x << y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", "<<", r) } y = 1 r = x << y if r != 8589934592 { t.Errorf("4294967296 %s 1 = %d, want 8589934592", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("4294967296 %s 65535 = %d, want 0", "<<", r) } x = 9223372036854775806 y = 0 r = x << y if r != 9223372036854775806 { t.Errorf("9223372036854775806 %s 0 = %d, want 9223372036854775806", "<<", r) } y = 1 r = x << y if r != -4 { t.Errorf("9223372036854775806 %s 1 = %d, want -4", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("9223372036854775806 %s 65535 = %d, want 0", "<<", r) } x = 9223372036854775807 y = 0 r = x << y if r != 9223372036854775807 { t.Errorf("9223372036854775807 %s 0 = %d, want 9223372036854775807", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("9223372036854775807 %s 1 = %d, want -2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("9223372036854775807 %s 65535 = %d, want 0", "<<", r) } } func TestConstFoldint64uint16rsh(t *testing.T) { var x, r int64 var y uint16 x = -9223372036854775808 y = 0 r = x >> y if r != -9223372036854775808 { t.Errorf("-9223372036854775808 %s 0 = %d, want -9223372036854775808", ">>", r) } y = 1 r = x >> y if r != -4611686018427387904 { t.Errorf("-9223372036854775808 %s 1 = %d, want -4611686018427387904", ">>", r) } y = 65535 r = x >> y if r != -1 { t.Errorf("-9223372036854775808 %s 65535 = %d, want -1", ">>", r) } x = -9223372036854775807 y = 0 r = x >> y if r != -9223372036854775807 { t.Errorf("-9223372036854775807 %s 0 = %d, want -9223372036854775807", ">>", r) } y = 1 r = x >> y if r != -4611686018427387904 { t.Errorf("-9223372036854775807 %s 1 = %d, want -4611686018427387904", ">>", r) } y = 65535 r = x >> y if r != -1 { t.Errorf("-9223372036854775807 %s 65535 = %d, want -1", ">>", r) } x = -4294967296 y = 0 r = x >> y if r != -4294967296 { t.Errorf("-4294967296 %s 0 = %d, want -4294967296", ">>", r) } y = 1 r = x >> y if r != -2147483648 { t.Errorf("-4294967296 %s 1 = %d, want -2147483648", ">>", r) } y = 65535 r = x >> y if r != -1 { t.Errorf("-4294967296 %s 65535 = %d, want -1", ">>", r) } x = -1 y = 0 r = x >> y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", ">>", r) } y = 1 r = x >> y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", ">>", r) } y = 65535 r = x >> y if r != -1 { t.Errorf("-1 %s 65535 = %d, want -1", ">>", r) } x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("1 %s 65535 = %d, want 0", ">>", r) } x = 4294967296 y = 0 r = x >> y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", ">>", r) } y = 1 r = x >> y if r != 2147483648 { t.Errorf("4294967296 %s 1 = %d, want 2147483648", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("4294967296 %s 65535 = %d, want 0", ">>", r) } x = 9223372036854775806 y = 0 r = x >> y if r != 9223372036854775806 { t.Errorf("9223372036854775806 %s 0 = %d, want 9223372036854775806", ">>", r) } y = 1 r = x >> y if r != 4611686018427387903 { t.Errorf("9223372036854775806 %s 1 = %d, want 4611686018427387903", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("9223372036854775806 %s 65535 = %d, want 0", ">>", r) } x = 9223372036854775807 y = 0 r = x >> y if r != 9223372036854775807 { t.Errorf("9223372036854775807 %s 0 = %d, want 9223372036854775807", ">>", r) } y = 1 r = x >> y if r != 4611686018427387903 { t.Errorf("9223372036854775807 %s 1 = %d, want 4611686018427387903", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("9223372036854775807 %s 65535 = %d, want 0", ">>", r) } } func TestConstFoldint64uint8lsh(t *testing.T) { var x, r int64 var y uint8 x = -9223372036854775808 y = 0 r = x << y if r != -9223372036854775808 { t.Errorf("-9223372036854775808 %s 0 = %d, want -9223372036854775808", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("-9223372036854775808 %s 1 = %d, want 0", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("-9223372036854775808 %s 255 = %d, want 0", "<<", r) } x = -9223372036854775807 y = 0 r = x << y if r != -9223372036854775807 { t.Errorf("-9223372036854775807 %s 0 = %d, want -9223372036854775807", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("-9223372036854775807 %s 1 = %d, want 2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("-9223372036854775807 %s 255 = %d, want 0", "<<", r) } x = -4294967296 y = 0 r = x << y if r != -4294967296 { t.Errorf("-4294967296 %s 0 = %d, want -4294967296", "<<", r) } y = 1 r = x << y if r != -8589934592 { t.Errorf("-4294967296 %s 1 = %d, want -8589934592", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("-4294967296 %s 255 = %d, want 0", "<<", r) } x = -1 y = 0 r = x << y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("-1 %s 255 = %d, want 0", "<<", r) } x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("1 %s 255 = %d, want 0", "<<", r) } x = 4294967296 y = 0 r = x << y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", "<<", r) } y = 1 r = x << y if r != 8589934592 { t.Errorf("4294967296 %s 1 = %d, want 8589934592", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("4294967296 %s 255 = %d, want 0", "<<", r) } x = 9223372036854775806 y = 0 r = x << y if r != 9223372036854775806 { t.Errorf("9223372036854775806 %s 0 = %d, want 9223372036854775806", "<<", r) } y = 1 r = x << y if r != -4 { t.Errorf("9223372036854775806 %s 1 = %d, want -4", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("9223372036854775806 %s 255 = %d, want 0", "<<", r) } x = 9223372036854775807 y = 0 r = x << y if r != 9223372036854775807 { t.Errorf("9223372036854775807 %s 0 = %d, want 9223372036854775807", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("9223372036854775807 %s 1 = %d, want -2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("9223372036854775807 %s 255 = %d, want 0", "<<", r) } } func TestConstFoldint64uint8rsh(t *testing.T) { var x, r int64 var y uint8 x = -9223372036854775808 y = 0 r = x >> y if r != -9223372036854775808 { t.Errorf("-9223372036854775808 %s 0 = %d, want -9223372036854775808", ">>", r) } y = 1 r = x >> y if r != -4611686018427387904 { t.Errorf("-9223372036854775808 %s 1 = %d, want -4611686018427387904", ">>", r) } y = 255 r = x >> y if r != -1 { t.Errorf("-9223372036854775808 %s 255 = %d, want -1", ">>", r) } x = -9223372036854775807 y = 0 r = x >> y if r != -9223372036854775807 { t.Errorf("-9223372036854775807 %s 0 = %d, want -9223372036854775807", ">>", r) } y = 1 r = x >> y if r != -4611686018427387904 { t.Errorf("-9223372036854775807 %s 1 = %d, want -4611686018427387904", ">>", r) } y = 255 r = x >> y if r != -1 { t.Errorf("-9223372036854775807 %s 255 = %d, want -1", ">>", r) } x = -4294967296 y = 0 r = x >> y if r != -4294967296 { t.Errorf("-4294967296 %s 0 = %d, want -4294967296", ">>", r) } y = 1 r = x >> y if r != -2147483648 { t.Errorf("-4294967296 %s 1 = %d, want -2147483648", ">>", r) } y = 255 r = x >> y if r != -1 { t.Errorf("-4294967296 %s 255 = %d, want -1", ">>", r) } x = -1 y = 0 r = x >> y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", ">>", r) } y = 1 r = x >> y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", ">>", r) } y = 255 r = x >> y if r != -1 { t.Errorf("-1 %s 255 = %d, want -1", ">>", r) } x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("1 %s 255 = %d, want 0", ">>", r) } x = 4294967296 y = 0 r = x >> y if r != 4294967296 { t.Errorf("4294967296 %s 0 = %d, want 4294967296", ">>", r) } y = 1 r = x >> y if r != 2147483648 { t.Errorf("4294967296 %s 1 = %d, want 2147483648", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("4294967296 %s 255 = %d, want 0", ">>", r) } x = 9223372036854775806 y = 0 r = x >> y if r != 9223372036854775806 { t.Errorf("9223372036854775806 %s 0 = %d, want 9223372036854775806", ">>", r) } y = 1 r = x >> y if r != 4611686018427387903 { t.Errorf("9223372036854775806 %s 1 = %d, want 4611686018427387903", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("9223372036854775806 %s 255 = %d, want 0", ">>", r) } x = 9223372036854775807 y = 0 r = x >> y if r != 9223372036854775807 { t.Errorf("9223372036854775807 %s 0 = %d, want 9223372036854775807", ">>", r) } y = 1 r = x >> y if r != 4611686018427387903 { t.Errorf("9223372036854775807 %s 1 = %d, want 4611686018427387903", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("9223372036854775807 %s 255 = %d, want 0", ">>", r) } } func TestConstFolduint32uint64lsh(t *testing.T) { var x, r uint32 var y uint64 x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("1 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("1 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 4294967295 y = 0 r = x << y if r != 4294967295 { t.Errorf("4294967295 %s 0 = %d, want 4294967295", "<<", r) } y = 1 r = x << y if r != 4294967294 { t.Errorf("4294967295 %s 1 = %d, want 4294967294", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("4294967295 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("4294967295 %s 18446744073709551615 = %d, want 0", "<<", r) } } func TestConstFolduint32uint64rsh(t *testing.T) { var x, r uint32 var y uint64 x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("1 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("1 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 4294967295 y = 0 r = x >> y if r != 4294967295 { t.Errorf("4294967295 %s 0 = %d, want 4294967295", ">>", r) } y = 1 r = x >> y if r != 2147483647 { t.Errorf("4294967295 %s 1 = %d, want 2147483647", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("4294967295 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("4294967295 %s 18446744073709551615 = %d, want 0", ">>", r) } } func TestConstFolduint32uint32lsh(t *testing.T) { var x, r uint32 var y uint32 x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("1 %s 4294967295 = %d, want 0", "<<", r) } x = 4294967295 y = 0 r = x << y if r != 4294967295 { t.Errorf("4294967295 %s 0 = %d, want 4294967295", "<<", r) } y = 1 r = x << y if r != 4294967294 { t.Errorf("4294967295 %s 1 = %d, want 4294967294", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("4294967295 %s 4294967295 = %d, want 0", "<<", r) } } func TestConstFolduint32uint32rsh(t *testing.T) { var x, r uint32 var y uint32 x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("1 %s 4294967295 = %d, want 0", ">>", r) } x = 4294967295 y = 0 r = x >> y if r != 4294967295 { t.Errorf("4294967295 %s 0 = %d, want 4294967295", ">>", r) } y = 1 r = x >> y if r != 2147483647 { t.Errorf("4294967295 %s 1 = %d, want 2147483647", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("4294967295 %s 4294967295 = %d, want 0", ">>", r) } } func TestConstFolduint32uint16lsh(t *testing.T) { var x, r uint32 var y uint16 x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("1 %s 65535 = %d, want 0", "<<", r) } x = 4294967295 y = 0 r = x << y if r != 4294967295 { t.Errorf("4294967295 %s 0 = %d, want 4294967295", "<<", r) } y = 1 r = x << y if r != 4294967294 { t.Errorf("4294967295 %s 1 = %d, want 4294967294", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("4294967295 %s 65535 = %d, want 0", "<<", r) } } func TestConstFolduint32uint16rsh(t *testing.T) { var x, r uint32 var y uint16 x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("1 %s 65535 = %d, want 0", ">>", r) } x = 4294967295 y = 0 r = x >> y if r != 4294967295 { t.Errorf("4294967295 %s 0 = %d, want 4294967295", ">>", r) } y = 1 r = x >> y if r != 2147483647 { t.Errorf("4294967295 %s 1 = %d, want 2147483647", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("4294967295 %s 65535 = %d, want 0", ">>", r) } } func TestConstFolduint32uint8lsh(t *testing.T) { var x, r uint32 var y uint8 x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("1 %s 255 = %d, want 0", "<<", r) } x = 4294967295 y = 0 r = x << y if r != 4294967295 { t.Errorf("4294967295 %s 0 = %d, want 4294967295", "<<", r) } y = 1 r = x << y if r != 4294967294 { t.Errorf("4294967295 %s 1 = %d, want 4294967294", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("4294967295 %s 255 = %d, want 0", "<<", r) } } func TestConstFolduint32uint8rsh(t *testing.T) { var x, r uint32 var y uint8 x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("1 %s 255 = %d, want 0", ">>", r) } x = 4294967295 y = 0 r = x >> y if r != 4294967295 { t.Errorf("4294967295 %s 0 = %d, want 4294967295", ">>", r) } y = 1 r = x >> y if r != 2147483647 { t.Errorf("4294967295 %s 1 = %d, want 2147483647", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("4294967295 %s 255 = %d, want 0", ">>", r) } } func TestConstFoldint32uint64lsh(t *testing.T) { var x, r int32 var y uint64 x = -2147483648 y = 0 r = x << y if r != -2147483648 { t.Errorf("-2147483648 %s 0 = %d, want -2147483648", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("-2147483648 %s 1 = %d, want 0", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("-2147483648 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("-2147483648 %s 18446744073709551615 = %d, want 0", "<<", r) } x = -2147483647 y = 0 r = x << y if r != -2147483647 { t.Errorf("-2147483647 %s 0 = %d, want -2147483647", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("-2147483647 %s 1 = %d, want 2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("-2147483647 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("-2147483647 %s 18446744073709551615 = %d, want 0", "<<", r) } x = -1 y = 0 r = x << y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("-1 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("-1 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("1 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("1 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 2147483647 y = 0 r = x << y if r != 2147483647 { t.Errorf("2147483647 %s 0 = %d, want 2147483647", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("2147483647 %s 1 = %d, want -2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("2147483647 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("2147483647 %s 18446744073709551615 = %d, want 0", "<<", r) } } func TestConstFoldint32uint64rsh(t *testing.T) { var x, r int32 var y uint64 x = -2147483648 y = 0 r = x >> y if r != -2147483648 { t.Errorf("-2147483648 %s 0 = %d, want -2147483648", ">>", r) } y = 1 r = x >> y if r != -1073741824 { t.Errorf("-2147483648 %s 1 = %d, want -1073741824", ">>", r) } y = 4294967296 r = x >> y if r != -1 { t.Errorf("-2147483648 %s 4294967296 = %d, want -1", ">>", r) } y = 18446744073709551615 r = x >> y if r != -1 { t.Errorf("-2147483648 %s 18446744073709551615 = %d, want -1", ">>", r) } x = -2147483647 y = 0 r = x >> y if r != -2147483647 { t.Errorf("-2147483647 %s 0 = %d, want -2147483647", ">>", r) } y = 1 r = x >> y if r != -1073741824 { t.Errorf("-2147483647 %s 1 = %d, want -1073741824", ">>", r) } y = 4294967296 r = x >> y if r != -1 { t.Errorf("-2147483647 %s 4294967296 = %d, want -1", ">>", r) } y = 18446744073709551615 r = x >> y if r != -1 { t.Errorf("-2147483647 %s 18446744073709551615 = %d, want -1", ">>", r) } x = -1 y = 0 r = x >> y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", ">>", r) } y = 1 r = x >> y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", ">>", r) } y = 4294967296 r = x >> y if r != -1 { t.Errorf("-1 %s 4294967296 = %d, want -1", ">>", r) } y = 18446744073709551615 r = x >> y if r != -1 { t.Errorf("-1 %s 18446744073709551615 = %d, want -1", ">>", r) } x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("1 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("1 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 2147483647 y = 0 r = x >> y if r != 2147483647 { t.Errorf("2147483647 %s 0 = %d, want 2147483647", ">>", r) } y = 1 r = x >> y if r != 1073741823 { t.Errorf("2147483647 %s 1 = %d, want 1073741823", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("2147483647 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("2147483647 %s 18446744073709551615 = %d, want 0", ">>", r) } } func TestConstFoldint32uint32lsh(t *testing.T) { var x, r int32 var y uint32 x = -2147483648 y = 0 r = x << y if r != -2147483648 { t.Errorf("-2147483648 %s 0 = %d, want -2147483648", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("-2147483648 %s 1 = %d, want 0", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("-2147483648 %s 4294967295 = %d, want 0", "<<", r) } x = -2147483647 y = 0 r = x << y if r != -2147483647 { t.Errorf("-2147483647 %s 0 = %d, want -2147483647", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("-2147483647 %s 1 = %d, want 2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("-2147483647 %s 4294967295 = %d, want 0", "<<", r) } x = -1 y = 0 r = x << y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("-1 %s 4294967295 = %d, want 0", "<<", r) } x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("1 %s 4294967295 = %d, want 0", "<<", r) } x = 2147483647 y = 0 r = x << y if r != 2147483647 { t.Errorf("2147483647 %s 0 = %d, want 2147483647", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("2147483647 %s 1 = %d, want -2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("2147483647 %s 4294967295 = %d, want 0", "<<", r) } } func TestConstFoldint32uint32rsh(t *testing.T) { var x, r int32 var y uint32 x = -2147483648 y = 0 r = x >> y if r != -2147483648 { t.Errorf("-2147483648 %s 0 = %d, want -2147483648", ">>", r) } y = 1 r = x >> y if r != -1073741824 { t.Errorf("-2147483648 %s 1 = %d, want -1073741824", ">>", r) } y = 4294967295 r = x >> y if r != -1 { t.Errorf("-2147483648 %s 4294967295 = %d, want -1", ">>", r) } x = -2147483647 y = 0 r = x >> y if r != -2147483647 { t.Errorf("-2147483647 %s 0 = %d, want -2147483647", ">>", r) } y = 1 r = x >> y if r != -1073741824 { t.Errorf("-2147483647 %s 1 = %d, want -1073741824", ">>", r) } y = 4294967295 r = x >> y if r != -1 { t.Errorf("-2147483647 %s 4294967295 = %d, want -1", ">>", r) } x = -1 y = 0 r = x >> y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", ">>", r) } y = 1 r = x >> y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", ">>", r) } y = 4294967295 r = x >> y if r != -1 { t.Errorf("-1 %s 4294967295 = %d, want -1", ">>", r) } x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("1 %s 4294967295 = %d, want 0", ">>", r) } x = 2147483647 y = 0 r = x >> y if r != 2147483647 { t.Errorf("2147483647 %s 0 = %d, want 2147483647", ">>", r) } y = 1 r = x >> y if r != 1073741823 { t.Errorf("2147483647 %s 1 = %d, want 1073741823", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("2147483647 %s 4294967295 = %d, want 0", ">>", r) } } func TestConstFoldint32uint16lsh(t *testing.T) { var x, r int32 var y uint16 x = -2147483648 y = 0 r = x << y if r != -2147483648 { t.Errorf("-2147483648 %s 0 = %d, want -2147483648", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("-2147483648 %s 1 = %d, want 0", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("-2147483648 %s 65535 = %d, want 0", "<<", r) } x = -2147483647 y = 0 r = x << y if r != -2147483647 { t.Errorf("-2147483647 %s 0 = %d, want -2147483647", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("-2147483647 %s 1 = %d, want 2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("-2147483647 %s 65535 = %d, want 0", "<<", r) } x = -1 y = 0 r = x << y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("-1 %s 65535 = %d, want 0", "<<", r) } x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("1 %s 65535 = %d, want 0", "<<", r) } x = 2147483647 y = 0 r = x << y if r != 2147483647 { t.Errorf("2147483647 %s 0 = %d, want 2147483647", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("2147483647 %s 1 = %d, want -2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("2147483647 %s 65535 = %d, want 0", "<<", r) } } func TestConstFoldint32uint16rsh(t *testing.T) { var x, r int32 var y uint16 x = -2147483648 y = 0 r = x >> y if r != -2147483648 { t.Errorf("-2147483648 %s 0 = %d, want -2147483648", ">>", r) } y = 1 r = x >> y if r != -1073741824 { t.Errorf("-2147483648 %s 1 = %d, want -1073741824", ">>", r) } y = 65535 r = x >> y if r != -1 { t.Errorf("-2147483648 %s 65535 = %d, want -1", ">>", r) } x = -2147483647 y = 0 r = x >> y if r != -2147483647 { t.Errorf("-2147483647 %s 0 = %d, want -2147483647", ">>", r) } y = 1 r = x >> y if r != -1073741824 { t.Errorf("-2147483647 %s 1 = %d, want -1073741824", ">>", r) } y = 65535 r = x >> y if r != -1 { t.Errorf("-2147483647 %s 65535 = %d, want -1", ">>", r) } x = -1 y = 0 r = x >> y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", ">>", r) } y = 1 r = x >> y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", ">>", r) } y = 65535 r = x >> y if r != -1 { t.Errorf("-1 %s 65535 = %d, want -1", ">>", r) } x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("1 %s 65535 = %d, want 0", ">>", r) } x = 2147483647 y = 0 r = x >> y if r != 2147483647 { t.Errorf("2147483647 %s 0 = %d, want 2147483647", ">>", r) } y = 1 r = x >> y if r != 1073741823 { t.Errorf("2147483647 %s 1 = %d, want 1073741823", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("2147483647 %s 65535 = %d, want 0", ">>", r) } } func TestConstFoldint32uint8lsh(t *testing.T) { var x, r int32 var y uint8 x = -2147483648 y = 0 r = x << y if r != -2147483648 { t.Errorf("-2147483648 %s 0 = %d, want -2147483648", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("-2147483648 %s 1 = %d, want 0", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("-2147483648 %s 255 = %d, want 0", "<<", r) } x = -2147483647 y = 0 r = x << y if r != -2147483647 { t.Errorf("-2147483647 %s 0 = %d, want -2147483647", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("-2147483647 %s 1 = %d, want 2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("-2147483647 %s 255 = %d, want 0", "<<", r) } x = -1 y = 0 r = x << y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("-1 %s 255 = %d, want 0", "<<", r) } x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("1 %s 255 = %d, want 0", "<<", r) } x = 2147483647 y = 0 r = x << y if r != 2147483647 { t.Errorf("2147483647 %s 0 = %d, want 2147483647", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("2147483647 %s 1 = %d, want -2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("2147483647 %s 255 = %d, want 0", "<<", r) } } func TestConstFoldint32uint8rsh(t *testing.T) { var x, r int32 var y uint8 x = -2147483648 y = 0 r = x >> y if r != -2147483648 { t.Errorf("-2147483648 %s 0 = %d, want -2147483648", ">>", r) } y = 1 r = x >> y if r != -1073741824 { t.Errorf("-2147483648 %s 1 = %d, want -1073741824", ">>", r) } y = 255 r = x >> y if r != -1 { t.Errorf("-2147483648 %s 255 = %d, want -1", ">>", r) } x = -2147483647 y = 0 r = x >> y if r != -2147483647 { t.Errorf("-2147483647 %s 0 = %d, want -2147483647", ">>", r) } y = 1 r = x >> y if r != -1073741824 { t.Errorf("-2147483647 %s 1 = %d, want -1073741824", ">>", r) } y = 255 r = x >> y if r != -1 { t.Errorf("-2147483647 %s 255 = %d, want -1", ">>", r) } x = -1 y = 0 r = x >> y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", ">>", r) } y = 1 r = x >> y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", ">>", r) } y = 255 r = x >> y if r != -1 { t.Errorf("-1 %s 255 = %d, want -1", ">>", r) } x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("1 %s 255 = %d, want 0", ">>", r) } x = 2147483647 y = 0 r = x >> y if r != 2147483647 { t.Errorf("2147483647 %s 0 = %d, want 2147483647", ">>", r) } y = 1 r = x >> y if r != 1073741823 { t.Errorf("2147483647 %s 1 = %d, want 1073741823", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("2147483647 %s 255 = %d, want 0", ">>", r) } } func TestConstFolduint16uint64lsh(t *testing.T) { var x, r uint16 var y uint64 x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("1 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("1 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 65535 y = 0 r = x << y if r != 65535 { t.Errorf("65535 %s 0 = %d, want 65535", "<<", r) } y = 1 r = x << y if r != 65534 { t.Errorf("65535 %s 1 = %d, want 65534", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("65535 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("65535 %s 18446744073709551615 = %d, want 0", "<<", r) } } func TestConstFolduint16uint64rsh(t *testing.T) { var x, r uint16 var y uint64 x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("1 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("1 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 65535 y = 0 r = x >> y if r != 65535 { t.Errorf("65535 %s 0 = %d, want 65535", ">>", r) } y = 1 r = x >> y if r != 32767 { t.Errorf("65535 %s 1 = %d, want 32767", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("65535 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("65535 %s 18446744073709551615 = %d, want 0", ">>", r) } } func TestConstFolduint16uint32lsh(t *testing.T) { var x, r uint16 var y uint32 x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("1 %s 4294967295 = %d, want 0", "<<", r) } x = 65535 y = 0 r = x << y if r != 65535 { t.Errorf("65535 %s 0 = %d, want 65535", "<<", r) } y = 1 r = x << y if r != 65534 { t.Errorf("65535 %s 1 = %d, want 65534", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("65535 %s 4294967295 = %d, want 0", "<<", r) } } func TestConstFolduint16uint32rsh(t *testing.T) { var x, r uint16 var y uint32 x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("1 %s 4294967295 = %d, want 0", ">>", r) } x = 65535 y = 0 r = x >> y if r != 65535 { t.Errorf("65535 %s 0 = %d, want 65535", ">>", r) } y = 1 r = x >> y if r != 32767 { t.Errorf("65535 %s 1 = %d, want 32767", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("65535 %s 4294967295 = %d, want 0", ">>", r) } } func TestConstFolduint16uint16lsh(t *testing.T) { var x, r uint16 var y uint16 x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("1 %s 65535 = %d, want 0", "<<", r) } x = 65535 y = 0 r = x << y if r != 65535 { t.Errorf("65535 %s 0 = %d, want 65535", "<<", r) } y = 1 r = x << y if r != 65534 { t.Errorf("65535 %s 1 = %d, want 65534", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("65535 %s 65535 = %d, want 0", "<<", r) } } func TestConstFolduint16uint16rsh(t *testing.T) { var x, r uint16 var y uint16 x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("1 %s 65535 = %d, want 0", ">>", r) } x = 65535 y = 0 r = x >> y if r != 65535 { t.Errorf("65535 %s 0 = %d, want 65535", ">>", r) } y = 1 r = x >> y if r != 32767 { t.Errorf("65535 %s 1 = %d, want 32767", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("65535 %s 65535 = %d, want 0", ">>", r) } } func TestConstFolduint16uint8lsh(t *testing.T) { var x, r uint16 var y uint8 x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("1 %s 255 = %d, want 0", "<<", r) } x = 65535 y = 0 r = x << y if r != 65535 { t.Errorf("65535 %s 0 = %d, want 65535", "<<", r) } y = 1 r = x << y if r != 65534 { t.Errorf("65535 %s 1 = %d, want 65534", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("65535 %s 255 = %d, want 0", "<<", r) } } func TestConstFolduint16uint8rsh(t *testing.T) { var x, r uint16 var y uint8 x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("1 %s 255 = %d, want 0", ">>", r) } x = 65535 y = 0 r = x >> y if r != 65535 { t.Errorf("65535 %s 0 = %d, want 65535", ">>", r) } y = 1 r = x >> y if r != 32767 { t.Errorf("65535 %s 1 = %d, want 32767", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("65535 %s 255 = %d, want 0", ">>", r) } } func TestConstFoldint16uint64lsh(t *testing.T) { var x, r int16 var y uint64 x = -32768 y = 0 r = x << y if r != -32768 { t.Errorf("-32768 %s 0 = %d, want -32768", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("-32768 %s 1 = %d, want 0", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("-32768 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("-32768 %s 18446744073709551615 = %d, want 0", "<<", r) } x = -32767 y = 0 r = x << y if r != -32767 { t.Errorf("-32767 %s 0 = %d, want -32767", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("-32767 %s 1 = %d, want 2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("-32767 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("-32767 %s 18446744073709551615 = %d, want 0", "<<", r) } x = -1 y = 0 r = x << y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("-1 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("-1 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("1 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("1 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 32766 y = 0 r = x << y if r != 32766 { t.Errorf("32766 %s 0 = %d, want 32766", "<<", r) } y = 1 r = x << y if r != -4 { t.Errorf("32766 %s 1 = %d, want -4", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("32766 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("32766 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 32767 y = 0 r = x << y if r != 32767 { t.Errorf("32767 %s 0 = %d, want 32767", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("32767 %s 1 = %d, want -2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("32767 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("32767 %s 18446744073709551615 = %d, want 0", "<<", r) } } func TestConstFoldint16uint64rsh(t *testing.T) { var x, r int16 var y uint64 x = -32768 y = 0 r = x >> y if r != -32768 { t.Errorf("-32768 %s 0 = %d, want -32768", ">>", r) } y = 1 r = x >> y if r != -16384 { t.Errorf("-32768 %s 1 = %d, want -16384", ">>", r) } y = 4294967296 r = x >> y if r != -1 { t.Errorf("-32768 %s 4294967296 = %d, want -1", ">>", r) } y = 18446744073709551615 r = x >> y if r != -1 { t.Errorf("-32768 %s 18446744073709551615 = %d, want -1", ">>", r) } x = -32767 y = 0 r = x >> y if r != -32767 { t.Errorf("-32767 %s 0 = %d, want -32767", ">>", r) } y = 1 r = x >> y if r != -16384 { t.Errorf("-32767 %s 1 = %d, want -16384", ">>", r) } y = 4294967296 r = x >> y if r != -1 { t.Errorf("-32767 %s 4294967296 = %d, want -1", ">>", r) } y = 18446744073709551615 r = x >> y if r != -1 { t.Errorf("-32767 %s 18446744073709551615 = %d, want -1", ">>", r) } x = -1 y = 0 r = x >> y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", ">>", r) } y = 1 r = x >> y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", ">>", r) } y = 4294967296 r = x >> y if r != -1 { t.Errorf("-1 %s 4294967296 = %d, want -1", ">>", r) } y = 18446744073709551615 r = x >> y if r != -1 { t.Errorf("-1 %s 18446744073709551615 = %d, want -1", ">>", r) } x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("1 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("1 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 32766 y = 0 r = x >> y if r != 32766 { t.Errorf("32766 %s 0 = %d, want 32766", ">>", r) } y = 1 r = x >> y if r != 16383 { t.Errorf("32766 %s 1 = %d, want 16383", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("32766 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("32766 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 32767 y = 0 r = x >> y if r != 32767 { t.Errorf("32767 %s 0 = %d, want 32767", ">>", r) } y = 1 r = x >> y if r != 16383 { t.Errorf("32767 %s 1 = %d, want 16383", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("32767 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("32767 %s 18446744073709551615 = %d, want 0", ">>", r) } } func TestConstFoldint16uint32lsh(t *testing.T) { var x, r int16 var y uint32 x = -32768 y = 0 r = x << y if r != -32768 { t.Errorf("-32768 %s 0 = %d, want -32768", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("-32768 %s 1 = %d, want 0", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("-32768 %s 4294967295 = %d, want 0", "<<", r) } x = -32767 y = 0 r = x << y if r != -32767 { t.Errorf("-32767 %s 0 = %d, want -32767", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("-32767 %s 1 = %d, want 2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("-32767 %s 4294967295 = %d, want 0", "<<", r) } x = -1 y = 0 r = x << y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("-1 %s 4294967295 = %d, want 0", "<<", r) } x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("1 %s 4294967295 = %d, want 0", "<<", r) } x = 32766 y = 0 r = x << y if r != 32766 { t.Errorf("32766 %s 0 = %d, want 32766", "<<", r) } y = 1 r = x << y if r != -4 { t.Errorf("32766 %s 1 = %d, want -4", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("32766 %s 4294967295 = %d, want 0", "<<", r) } x = 32767 y = 0 r = x << y if r != 32767 { t.Errorf("32767 %s 0 = %d, want 32767", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("32767 %s 1 = %d, want -2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("32767 %s 4294967295 = %d, want 0", "<<", r) } } func TestConstFoldint16uint32rsh(t *testing.T) { var x, r int16 var y uint32 x = -32768 y = 0 r = x >> y if r != -32768 { t.Errorf("-32768 %s 0 = %d, want -32768", ">>", r) } y = 1 r = x >> y if r != -16384 { t.Errorf("-32768 %s 1 = %d, want -16384", ">>", r) } y = 4294967295 r = x >> y if r != -1 { t.Errorf("-32768 %s 4294967295 = %d, want -1", ">>", r) } x = -32767 y = 0 r = x >> y if r != -32767 { t.Errorf("-32767 %s 0 = %d, want -32767", ">>", r) } y = 1 r = x >> y if r != -16384 { t.Errorf("-32767 %s 1 = %d, want -16384", ">>", r) } y = 4294967295 r = x >> y if r != -1 { t.Errorf("-32767 %s 4294967295 = %d, want -1", ">>", r) } x = -1 y = 0 r = x >> y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", ">>", r) } y = 1 r = x >> y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", ">>", r) } y = 4294967295 r = x >> y if r != -1 { t.Errorf("-1 %s 4294967295 = %d, want -1", ">>", r) } x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("1 %s 4294967295 = %d, want 0", ">>", r) } x = 32766 y = 0 r = x >> y if r != 32766 { t.Errorf("32766 %s 0 = %d, want 32766", ">>", r) } y = 1 r = x >> y if r != 16383 { t.Errorf("32766 %s 1 = %d, want 16383", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("32766 %s 4294967295 = %d, want 0", ">>", r) } x = 32767 y = 0 r = x >> y if r != 32767 { t.Errorf("32767 %s 0 = %d, want 32767", ">>", r) } y = 1 r = x >> y if r != 16383 { t.Errorf("32767 %s 1 = %d, want 16383", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("32767 %s 4294967295 = %d, want 0", ">>", r) } } func TestConstFoldint16uint16lsh(t *testing.T) { var x, r int16 var y uint16 x = -32768 y = 0 r = x << y if r != -32768 { t.Errorf("-32768 %s 0 = %d, want -32768", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("-32768 %s 1 = %d, want 0", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("-32768 %s 65535 = %d, want 0", "<<", r) } x = -32767 y = 0 r = x << y if r != -32767 { t.Errorf("-32767 %s 0 = %d, want -32767", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("-32767 %s 1 = %d, want 2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("-32767 %s 65535 = %d, want 0", "<<", r) } x = -1 y = 0 r = x << y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("-1 %s 65535 = %d, want 0", "<<", r) } x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("1 %s 65535 = %d, want 0", "<<", r) } x = 32766 y = 0 r = x << y if r != 32766 { t.Errorf("32766 %s 0 = %d, want 32766", "<<", r) } y = 1 r = x << y if r != -4 { t.Errorf("32766 %s 1 = %d, want -4", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("32766 %s 65535 = %d, want 0", "<<", r) } x = 32767 y = 0 r = x << y if r != 32767 { t.Errorf("32767 %s 0 = %d, want 32767", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("32767 %s 1 = %d, want -2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("32767 %s 65535 = %d, want 0", "<<", r) } } func TestConstFoldint16uint16rsh(t *testing.T) { var x, r int16 var y uint16 x = -32768 y = 0 r = x >> y if r != -32768 { t.Errorf("-32768 %s 0 = %d, want -32768", ">>", r) } y = 1 r = x >> y if r != -16384 { t.Errorf("-32768 %s 1 = %d, want -16384", ">>", r) } y = 65535 r = x >> y if r != -1 { t.Errorf("-32768 %s 65535 = %d, want -1", ">>", r) } x = -32767 y = 0 r = x >> y if r != -32767 { t.Errorf("-32767 %s 0 = %d, want -32767", ">>", r) } y = 1 r = x >> y if r != -16384 { t.Errorf("-32767 %s 1 = %d, want -16384", ">>", r) } y = 65535 r = x >> y if r != -1 { t.Errorf("-32767 %s 65535 = %d, want -1", ">>", r) } x = -1 y = 0 r = x >> y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", ">>", r) } y = 1 r = x >> y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", ">>", r) } y = 65535 r = x >> y if r != -1 { t.Errorf("-1 %s 65535 = %d, want -1", ">>", r) } x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("1 %s 65535 = %d, want 0", ">>", r) } x = 32766 y = 0 r = x >> y if r != 32766 { t.Errorf("32766 %s 0 = %d, want 32766", ">>", r) } y = 1 r = x >> y if r != 16383 { t.Errorf("32766 %s 1 = %d, want 16383", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("32766 %s 65535 = %d, want 0", ">>", r) } x = 32767 y = 0 r = x >> y if r != 32767 { t.Errorf("32767 %s 0 = %d, want 32767", ">>", r) } y = 1 r = x >> y if r != 16383 { t.Errorf("32767 %s 1 = %d, want 16383", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("32767 %s 65535 = %d, want 0", ">>", r) } } func TestConstFoldint16uint8lsh(t *testing.T) { var x, r int16 var y uint8 x = -32768 y = 0 r = x << y if r != -32768 { t.Errorf("-32768 %s 0 = %d, want -32768", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("-32768 %s 1 = %d, want 0", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("-32768 %s 255 = %d, want 0", "<<", r) } x = -32767 y = 0 r = x << y if r != -32767 { t.Errorf("-32767 %s 0 = %d, want -32767", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("-32767 %s 1 = %d, want 2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("-32767 %s 255 = %d, want 0", "<<", r) } x = -1 y = 0 r = x << y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("-1 %s 255 = %d, want 0", "<<", r) } x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("1 %s 255 = %d, want 0", "<<", r) } x = 32766 y = 0 r = x << y if r != 32766 { t.Errorf("32766 %s 0 = %d, want 32766", "<<", r) } y = 1 r = x << y if r != -4 { t.Errorf("32766 %s 1 = %d, want -4", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("32766 %s 255 = %d, want 0", "<<", r) } x = 32767 y = 0 r = x << y if r != 32767 { t.Errorf("32767 %s 0 = %d, want 32767", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("32767 %s 1 = %d, want -2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("32767 %s 255 = %d, want 0", "<<", r) } } func TestConstFoldint16uint8rsh(t *testing.T) { var x, r int16 var y uint8 x = -32768 y = 0 r = x >> y if r != -32768 { t.Errorf("-32768 %s 0 = %d, want -32768", ">>", r) } y = 1 r = x >> y if r != -16384 { t.Errorf("-32768 %s 1 = %d, want -16384", ">>", r) } y = 255 r = x >> y if r != -1 { t.Errorf("-32768 %s 255 = %d, want -1", ">>", r) } x = -32767 y = 0 r = x >> y if r != -32767 { t.Errorf("-32767 %s 0 = %d, want -32767", ">>", r) } y = 1 r = x >> y if r != -16384 { t.Errorf("-32767 %s 1 = %d, want -16384", ">>", r) } y = 255 r = x >> y if r != -1 { t.Errorf("-32767 %s 255 = %d, want -1", ">>", r) } x = -1 y = 0 r = x >> y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", ">>", r) } y = 1 r = x >> y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", ">>", r) } y = 255 r = x >> y if r != -1 { t.Errorf("-1 %s 255 = %d, want -1", ">>", r) } x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("1 %s 255 = %d, want 0", ">>", r) } x = 32766 y = 0 r = x >> y if r != 32766 { t.Errorf("32766 %s 0 = %d, want 32766", ">>", r) } y = 1 r = x >> y if r != 16383 { t.Errorf("32766 %s 1 = %d, want 16383", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("32766 %s 255 = %d, want 0", ">>", r) } x = 32767 y = 0 r = x >> y if r != 32767 { t.Errorf("32767 %s 0 = %d, want 32767", ">>", r) } y = 1 r = x >> y if r != 16383 { t.Errorf("32767 %s 1 = %d, want 16383", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("32767 %s 255 = %d, want 0", ">>", r) } } func TestConstFolduint8uint64lsh(t *testing.T) { var x, r uint8 var y uint64 x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("1 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("1 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 255 y = 0 r = x << y if r != 255 { t.Errorf("255 %s 0 = %d, want 255", "<<", r) } y = 1 r = x << y if r != 254 { t.Errorf("255 %s 1 = %d, want 254", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("255 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("255 %s 18446744073709551615 = %d, want 0", "<<", r) } } func TestConstFolduint8uint64rsh(t *testing.T) { var x, r uint8 var y uint64 x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("1 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("1 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 255 y = 0 r = x >> y if r != 255 { t.Errorf("255 %s 0 = %d, want 255", ">>", r) } y = 1 r = x >> y if r != 127 { t.Errorf("255 %s 1 = %d, want 127", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("255 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("255 %s 18446744073709551615 = %d, want 0", ">>", r) } } func TestConstFolduint8uint32lsh(t *testing.T) { var x, r uint8 var y uint32 x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("1 %s 4294967295 = %d, want 0", "<<", r) } x = 255 y = 0 r = x << y if r != 255 { t.Errorf("255 %s 0 = %d, want 255", "<<", r) } y = 1 r = x << y if r != 254 { t.Errorf("255 %s 1 = %d, want 254", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("255 %s 4294967295 = %d, want 0", "<<", r) } } func TestConstFolduint8uint32rsh(t *testing.T) { var x, r uint8 var y uint32 x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("1 %s 4294967295 = %d, want 0", ">>", r) } x = 255 y = 0 r = x >> y if r != 255 { t.Errorf("255 %s 0 = %d, want 255", ">>", r) } y = 1 r = x >> y if r != 127 { t.Errorf("255 %s 1 = %d, want 127", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("255 %s 4294967295 = %d, want 0", ">>", r) } } func TestConstFolduint8uint16lsh(t *testing.T) { var x, r uint8 var y uint16 x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("1 %s 65535 = %d, want 0", "<<", r) } x = 255 y = 0 r = x << y if r != 255 { t.Errorf("255 %s 0 = %d, want 255", "<<", r) } y = 1 r = x << y if r != 254 { t.Errorf("255 %s 1 = %d, want 254", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("255 %s 65535 = %d, want 0", "<<", r) } } func TestConstFolduint8uint16rsh(t *testing.T) { var x, r uint8 var y uint16 x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("1 %s 65535 = %d, want 0", ">>", r) } x = 255 y = 0 r = x >> y if r != 255 { t.Errorf("255 %s 0 = %d, want 255", ">>", r) } y = 1 r = x >> y if r != 127 { t.Errorf("255 %s 1 = %d, want 127", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("255 %s 65535 = %d, want 0", ">>", r) } } func TestConstFolduint8uint8lsh(t *testing.T) { var x, r uint8 var y uint8 x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("1 %s 255 = %d, want 0", "<<", r) } x = 255 y = 0 r = x << y if r != 255 { t.Errorf("255 %s 0 = %d, want 255", "<<", r) } y = 1 r = x << y if r != 254 { t.Errorf("255 %s 1 = %d, want 254", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("255 %s 255 = %d, want 0", "<<", r) } } func TestConstFolduint8uint8rsh(t *testing.T) { var x, r uint8 var y uint8 x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("1 %s 255 = %d, want 0", ">>", r) } x = 255 y = 0 r = x >> y if r != 255 { t.Errorf("255 %s 0 = %d, want 255", ">>", r) } y = 1 r = x >> y if r != 127 { t.Errorf("255 %s 1 = %d, want 127", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("255 %s 255 = %d, want 0", ">>", r) } } func TestConstFoldint8uint64lsh(t *testing.T) { var x, r int8 var y uint64 x = -128 y = 0 r = x << y if r != -128 { t.Errorf("-128 %s 0 = %d, want -128", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("-128 %s 1 = %d, want 0", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("-128 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("-128 %s 18446744073709551615 = %d, want 0", "<<", r) } x = -127 y = 0 r = x << y if r != -127 { t.Errorf("-127 %s 0 = %d, want -127", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("-127 %s 1 = %d, want 2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("-127 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("-127 %s 18446744073709551615 = %d, want 0", "<<", r) } x = -1 y = 0 r = x << y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("-1 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("-1 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("1 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("1 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 126 y = 0 r = x << y if r != 126 { t.Errorf("126 %s 0 = %d, want 126", "<<", r) } y = 1 r = x << y if r != -4 { t.Errorf("126 %s 1 = %d, want -4", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("126 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("126 %s 18446744073709551615 = %d, want 0", "<<", r) } x = 127 y = 0 r = x << y if r != 127 { t.Errorf("127 %s 0 = %d, want 127", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("127 %s 1 = %d, want -2", "<<", r) } y = 4294967296 r = x << y if r != 0 { t.Errorf("127 %s 4294967296 = %d, want 0", "<<", r) } y = 18446744073709551615 r = x << y if r != 0 { t.Errorf("127 %s 18446744073709551615 = %d, want 0", "<<", r) } } func TestConstFoldint8uint64rsh(t *testing.T) { var x, r int8 var y uint64 x = -128 y = 0 r = x >> y if r != -128 { t.Errorf("-128 %s 0 = %d, want -128", ">>", r) } y = 1 r = x >> y if r != -64 { t.Errorf("-128 %s 1 = %d, want -64", ">>", r) } y = 4294967296 r = x >> y if r != -1 { t.Errorf("-128 %s 4294967296 = %d, want -1", ">>", r) } y = 18446744073709551615 r = x >> y if r != -1 { t.Errorf("-128 %s 18446744073709551615 = %d, want -1", ">>", r) } x = -127 y = 0 r = x >> y if r != -127 { t.Errorf("-127 %s 0 = %d, want -127", ">>", r) } y = 1 r = x >> y if r != -64 { t.Errorf("-127 %s 1 = %d, want -64", ">>", r) } y = 4294967296 r = x >> y if r != -1 { t.Errorf("-127 %s 4294967296 = %d, want -1", ">>", r) } y = 18446744073709551615 r = x >> y if r != -1 { t.Errorf("-127 %s 18446744073709551615 = %d, want -1", ">>", r) } x = -1 y = 0 r = x >> y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", ">>", r) } y = 1 r = x >> y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", ">>", r) } y = 4294967296 r = x >> y if r != -1 { t.Errorf("-1 %s 4294967296 = %d, want -1", ">>", r) } y = 18446744073709551615 r = x >> y if r != -1 { t.Errorf("-1 %s 18446744073709551615 = %d, want -1", ">>", r) } x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("0 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("0 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("1 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("1 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 126 y = 0 r = x >> y if r != 126 { t.Errorf("126 %s 0 = %d, want 126", ">>", r) } y = 1 r = x >> y if r != 63 { t.Errorf("126 %s 1 = %d, want 63", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("126 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("126 %s 18446744073709551615 = %d, want 0", ">>", r) } x = 127 y = 0 r = x >> y if r != 127 { t.Errorf("127 %s 0 = %d, want 127", ">>", r) } y = 1 r = x >> y if r != 63 { t.Errorf("127 %s 1 = %d, want 63", ">>", r) } y = 4294967296 r = x >> y if r != 0 { t.Errorf("127 %s 4294967296 = %d, want 0", ">>", r) } y = 18446744073709551615 r = x >> y if r != 0 { t.Errorf("127 %s 18446744073709551615 = %d, want 0", ">>", r) } } func TestConstFoldint8uint32lsh(t *testing.T) { var x, r int8 var y uint32 x = -128 y = 0 r = x << y if r != -128 { t.Errorf("-128 %s 0 = %d, want -128", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("-128 %s 1 = %d, want 0", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("-128 %s 4294967295 = %d, want 0", "<<", r) } x = -127 y = 0 r = x << y if r != -127 { t.Errorf("-127 %s 0 = %d, want -127", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("-127 %s 1 = %d, want 2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("-127 %s 4294967295 = %d, want 0", "<<", r) } x = -1 y = 0 r = x << y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("-1 %s 4294967295 = %d, want 0", "<<", r) } x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("1 %s 4294967295 = %d, want 0", "<<", r) } x = 126 y = 0 r = x << y if r != 126 { t.Errorf("126 %s 0 = %d, want 126", "<<", r) } y = 1 r = x << y if r != -4 { t.Errorf("126 %s 1 = %d, want -4", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("126 %s 4294967295 = %d, want 0", "<<", r) } x = 127 y = 0 r = x << y if r != 127 { t.Errorf("127 %s 0 = %d, want 127", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("127 %s 1 = %d, want -2", "<<", r) } y = 4294967295 r = x << y if r != 0 { t.Errorf("127 %s 4294967295 = %d, want 0", "<<", r) } } func TestConstFoldint8uint32rsh(t *testing.T) { var x, r int8 var y uint32 x = -128 y = 0 r = x >> y if r != -128 { t.Errorf("-128 %s 0 = %d, want -128", ">>", r) } y = 1 r = x >> y if r != -64 { t.Errorf("-128 %s 1 = %d, want -64", ">>", r) } y = 4294967295 r = x >> y if r != -1 { t.Errorf("-128 %s 4294967295 = %d, want -1", ">>", r) } x = -127 y = 0 r = x >> y if r != -127 { t.Errorf("-127 %s 0 = %d, want -127", ">>", r) } y = 1 r = x >> y if r != -64 { t.Errorf("-127 %s 1 = %d, want -64", ">>", r) } y = 4294967295 r = x >> y if r != -1 { t.Errorf("-127 %s 4294967295 = %d, want -1", ">>", r) } x = -1 y = 0 r = x >> y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", ">>", r) } y = 1 r = x >> y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", ">>", r) } y = 4294967295 r = x >> y if r != -1 { t.Errorf("-1 %s 4294967295 = %d, want -1", ">>", r) } x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("0 %s 4294967295 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("1 %s 4294967295 = %d, want 0", ">>", r) } x = 126 y = 0 r = x >> y if r != 126 { t.Errorf("126 %s 0 = %d, want 126", ">>", r) } y = 1 r = x >> y if r != 63 { t.Errorf("126 %s 1 = %d, want 63", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("126 %s 4294967295 = %d, want 0", ">>", r) } x = 127 y = 0 r = x >> y if r != 127 { t.Errorf("127 %s 0 = %d, want 127", ">>", r) } y = 1 r = x >> y if r != 63 { t.Errorf("127 %s 1 = %d, want 63", ">>", r) } y = 4294967295 r = x >> y if r != 0 { t.Errorf("127 %s 4294967295 = %d, want 0", ">>", r) } } func TestConstFoldint8uint16lsh(t *testing.T) { var x, r int8 var y uint16 x = -128 y = 0 r = x << y if r != -128 { t.Errorf("-128 %s 0 = %d, want -128", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("-128 %s 1 = %d, want 0", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("-128 %s 65535 = %d, want 0", "<<", r) } x = -127 y = 0 r = x << y if r != -127 { t.Errorf("-127 %s 0 = %d, want -127", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("-127 %s 1 = %d, want 2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("-127 %s 65535 = %d, want 0", "<<", r) } x = -1 y = 0 r = x << y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("-1 %s 65535 = %d, want 0", "<<", r) } x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("1 %s 65535 = %d, want 0", "<<", r) } x = 126 y = 0 r = x << y if r != 126 { t.Errorf("126 %s 0 = %d, want 126", "<<", r) } y = 1 r = x << y if r != -4 { t.Errorf("126 %s 1 = %d, want -4", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("126 %s 65535 = %d, want 0", "<<", r) } x = 127 y = 0 r = x << y if r != 127 { t.Errorf("127 %s 0 = %d, want 127", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("127 %s 1 = %d, want -2", "<<", r) } y = 65535 r = x << y if r != 0 { t.Errorf("127 %s 65535 = %d, want 0", "<<", r) } } func TestConstFoldint8uint16rsh(t *testing.T) { var x, r int8 var y uint16 x = -128 y = 0 r = x >> y if r != -128 { t.Errorf("-128 %s 0 = %d, want -128", ">>", r) } y = 1 r = x >> y if r != -64 { t.Errorf("-128 %s 1 = %d, want -64", ">>", r) } y = 65535 r = x >> y if r != -1 { t.Errorf("-128 %s 65535 = %d, want -1", ">>", r) } x = -127 y = 0 r = x >> y if r != -127 { t.Errorf("-127 %s 0 = %d, want -127", ">>", r) } y = 1 r = x >> y if r != -64 { t.Errorf("-127 %s 1 = %d, want -64", ">>", r) } y = 65535 r = x >> y if r != -1 { t.Errorf("-127 %s 65535 = %d, want -1", ">>", r) } x = -1 y = 0 r = x >> y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", ">>", r) } y = 1 r = x >> y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", ">>", r) } y = 65535 r = x >> y if r != -1 { t.Errorf("-1 %s 65535 = %d, want -1", ">>", r) } x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("0 %s 65535 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("1 %s 65535 = %d, want 0", ">>", r) } x = 126 y = 0 r = x >> y if r != 126 { t.Errorf("126 %s 0 = %d, want 126", ">>", r) } y = 1 r = x >> y if r != 63 { t.Errorf("126 %s 1 = %d, want 63", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("126 %s 65535 = %d, want 0", ">>", r) } x = 127 y = 0 r = x >> y if r != 127 { t.Errorf("127 %s 0 = %d, want 127", ">>", r) } y = 1 r = x >> y if r != 63 { t.Errorf("127 %s 1 = %d, want 63", ">>", r) } y = 65535 r = x >> y if r != 0 { t.Errorf("127 %s 65535 = %d, want 0", ">>", r) } } func TestConstFoldint8uint8lsh(t *testing.T) { var x, r int8 var y uint8 x = -128 y = 0 r = x << y if r != -128 { t.Errorf("-128 %s 0 = %d, want -128", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("-128 %s 1 = %d, want 0", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("-128 %s 255 = %d, want 0", "<<", r) } x = -127 y = 0 r = x << y if r != -127 { t.Errorf("-127 %s 0 = %d, want -127", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("-127 %s 1 = %d, want 2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("-127 %s 255 = %d, want 0", "<<", r) } x = -1 y = 0 r = x << y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("-1 %s 1 = %d, want -2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("-1 %s 255 = %d, want 0", "<<", r) } x = 0 y = 0 r = x << y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", "<<", r) } y = 1 r = x << y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", "<<", r) } x = 1 y = 0 r = x << y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", "<<", r) } y = 1 r = x << y if r != 2 { t.Errorf("1 %s 1 = %d, want 2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("1 %s 255 = %d, want 0", "<<", r) } x = 126 y = 0 r = x << y if r != 126 { t.Errorf("126 %s 0 = %d, want 126", "<<", r) } y = 1 r = x << y if r != -4 { t.Errorf("126 %s 1 = %d, want -4", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("126 %s 255 = %d, want 0", "<<", r) } x = 127 y = 0 r = x << y if r != 127 { t.Errorf("127 %s 0 = %d, want 127", "<<", r) } y = 1 r = x << y if r != -2 { t.Errorf("127 %s 1 = %d, want -2", "<<", r) } y = 255 r = x << y if r != 0 { t.Errorf("127 %s 255 = %d, want 0", "<<", r) } } func TestConstFoldint8uint8rsh(t *testing.T) { var x, r int8 var y uint8 x = -128 y = 0 r = x >> y if r != -128 { t.Errorf("-128 %s 0 = %d, want -128", ">>", r) } y = 1 r = x >> y if r != -64 { t.Errorf("-128 %s 1 = %d, want -64", ">>", r) } y = 255 r = x >> y if r != -1 { t.Errorf("-128 %s 255 = %d, want -1", ">>", r) } x = -127 y = 0 r = x >> y if r != -127 { t.Errorf("-127 %s 0 = %d, want -127", ">>", r) } y = 1 r = x >> y if r != -64 { t.Errorf("-127 %s 1 = %d, want -64", ">>", r) } y = 255 r = x >> y if r != -1 { t.Errorf("-127 %s 255 = %d, want -1", ">>", r) } x = -1 y = 0 r = x >> y if r != -1 { t.Errorf("-1 %s 0 = %d, want -1", ">>", r) } y = 1 r = x >> y if r != -1 { t.Errorf("-1 %s 1 = %d, want -1", ">>", r) } y = 255 r = x >> y if r != -1 { t.Errorf("-1 %s 255 = %d, want -1", ">>", r) } x = 0 y = 0 r = x >> y if r != 0 { t.Errorf("0 %s 0 = %d, want 0", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("0 %s 1 = %d, want 0", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("0 %s 255 = %d, want 0", ">>", r) } x = 1 y = 0 r = x >> y if r != 1 { t.Errorf("1 %s 0 = %d, want 1", ">>", r) } y = 1 r = x >> y if r != 0 { t.Errorf("1 %s 1 = %d, want 0", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("1 %s 255 = %d, want 0", ">>", r) } x = 126 y = 0 r = x >> y if r != 126 { t.Errorf("126 %s 0 = %d, want 126", ">>", r) } y = 1 r = x >> y if r != 63 { t.Errorf("126 %s 1 = %d, want 63", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("126 %s 255 = %d, want 0", ">>", r) } x = 127 y = 0 r = x >> y if r != 127 { t.Errorf("127 %s 0 = %d, want 127", ">>", r) } y = 1 r = x >> y if r != 63 { t.Errorf("127 %s 1 = %d, want 63", ">>", r) } y = 255 r = x >> y if r != 0 { t.Errorf("127 %s 255 = %d, want 0", ">>", r) } } func TestConstFoldCompareuint64(t *testing.T) { { var x uint64 = 0 var y uint64 = 0 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint64 = 0 var y uint64 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x uint64 = 0 var y uint64 = 4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x uint64 = 0 var y uint64 = 18446744073709551615 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x uint64 = 1 var y uint64 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint64 = 1 var y uint64 = 1 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint64 = 1 var y uint64 = 4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x uint64 = 1 var y uint64 = 18446744073709551615 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x uint64 = 4294967296 var y uint64 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint64 = 4294967296 var y uint64 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint64 = 4294967296 var y uint64 = 4294967296 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint64 = 4294967296 var y uint64 = 18446744073709551615 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x uint64 = 18446744073709551615 var y uint64 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint64 = 18446744073709551615 var y uint64 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint64 = 18446744073709551615 var y uint64 = 4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint64 = 18446744073709551615 var y uint64 = 18446744073709551615 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } } func TestConstFoldCompareint64(t *testing.T) { { var x int64 = -9223372036854775808 var y int64 = -9223372036854775808 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = -9223372036854775808 var y int64 = -9223372036854775807 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -9223372036854775808 var y int64 = -4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -9223372036854775808 var y int64 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -9223372036854775808 var y int64 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -9223372036854775808 var y int64 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -9223372036854775808 var y int64 = 4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -9223372036854775808 var y int64 = 9223372036854775806 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -9223372036854775808 var y int64 = 9223372036854775807 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -9223372036854775807 var y int64 = -9223372036854775808 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = -9223372036854775807 var y int64 = -9223372036854775807 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = -9223372036854775807 var y int64 = -4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -9223372036854775807 var y int64 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -9223372036854775807 var y int64 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -9223372036854775807 var y int64 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -9223372036854775807 var y int64 = 4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -9223372036854775807 var y int64 = 9223372036854775806 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -9223372036854775807 var y int64 = 9223372036854775807 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -4294967296 var y int64 = -9223372036854775808 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = -4294967296 var y int64 = -9223372036854775807 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = -4294967296 var y int64 = -4294967296 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = -4294967296 var y int64 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -4294967296 var y int64 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -4294967296 var y int64 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -4294967296 var y int64 = 4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -4294967296 var y int64 = 9223372036854775806 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -4294967296 var y int64 = 9223372036854775807 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -1 var y int64 = -9223372036854775808 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = -1 var y int64 = -9223372036854775807 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = -1 var y int64 = -4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = -1 var y int64 = -1 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = -1 var y int64 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -1 var y int64 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -1 var y int64 = 4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -1 var y int64 = 9223372036854775806 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = -1 var y int64 = 9223372036854775807 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = 0 var y int64 = -9223372036854775808 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 0 var y int64 = -9223372036854775807 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 0 var y int64 = -4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 0 var y int64 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 0 var y int64 = 0 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 0 var y int64 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = 0 var y int64 = 4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = 0 var y int64 = 9223372036854775806 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = 0 var y int64 = 9223372036854775807 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = 1 var y int64 = -9223372036854775808 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 1 var y int64 = -9223372036854775807 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 1 var y int64 = -4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 1 var y int64 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 1 var y int64 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 1 var y int64 = 1 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 1 var y int64 = 4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = 1 var y int64 = 9223372036854775806 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = 1 var y int64 = 9223372036854775807 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = 4294967296 var y int64 = -9223372036854775808 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 4294967296 var y int64 = -9223372036854775807 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 4294967296 var y int64 = -4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 4294967296 var y int64 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 4294967296 var y int64 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 4294967296 var y int64 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 4294967296 var y int64 = 4294967296 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 4294967296 var y int64 = 9223372036854775806 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = 4294967296 var y int64 = 9223372036854775807 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = 9223372036854775806 var y int64 = -9223372036854775808 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 9223372036854775806 var y int64 = -9223372036854775807 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 9223372036854775806 var y int64 = -4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 9223372036854775806 var y int64 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 9223372036854775806 var y int64 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 9223372036854775806 var y int64 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 9223372036854775806 var y int64 = 4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 9223372036854775806 var y int64 = 9223372036854775806 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 9223372036854775806 var y int64 = 9223372036854775807 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int64 = 9223372036854775807 var y int64 = -9223372036854775808 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 9223372036854775807 var y int64 = -9223372036854775807 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 9223372036854775807 var y int64 = -4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 9223372036854775807 var y int64 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 9223372036854775807 var y int64 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 9223372036854775807 var y int64 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 9223372036854775807 var y int64 = 4294967296 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 9223372036854775807 var y int64 = 9223372036854775806 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int64 = 9223372036854775807 var y int64 = 9223372036854775807 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } } func TestConstFoldCompareuint32(t *testing.T) { { var x uint32 = 0 var y uint32 = 0 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint32 = 0 var y uint32 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x uint32 = 0 var y uint32 = 4294967295 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x uint32 = 1 var y uint32 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint32 = 1 var y uint32 = 1 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint32 = 1 var y uint32 = 4294967295 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x uint32 = 4294967295 var y uint32 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint32 = 4294967295 var y uint32 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint32 = 4294967295 var y uint32 = 4294967295 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } } func TestConstFoldCompareint32(t *testing.T) { { var x int32 = -2147483648 var y int32 = -2147483648 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = -2147483648 var y int32 = -2147483647 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int32 = -2147483648 var y int32 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int32 = -2147483648 var y int32 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int32 = -2147483648 var y int32 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int32 = -2147483648 var y int32 = 2147483647 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int32 = -2147483647 var y int32 = -2147483648 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = -2147483647 var y int32 = -2147483647 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = -2147483647 var y int32 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int32 = -2147483647 var y int32 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int32 = -2147483647 var y int32 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int32 = -2147483647 var y int32 = 2147483647 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int32 = -1 var y int32 = -2147483648 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = -1 var y int32 = -2147483647 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = -1 var y int32 = -1 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = -1 var y int32 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int32 = -1 var y int32 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int32 = -1 var y int32 = 2147483647 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int32 = 0 var y int32 = -2147483648 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = 0 var y int32 = -2147483647 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = 0 var y int32 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = 0 var y int32 = 0 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = 0 var y int32 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int32 = 0 var y int32 = 2147483647 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int32 = 1 var y int32 = -2147483648 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = 1 var y int32 = -2147483647 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = 1 var y int32 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = 1 var y int32 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = 1 var y int32 = 1 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = 1 var y int32 = 2147483647 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int32 = 2147483647 var y int32 = -2147483648 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = 2147483647 var y int32 = -2147483647 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = 2147483647 var y int32 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = 2147483647 var y int32 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = 2147483647 var y int32 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int32 = 2147483647 var y int32 = 2147483647 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } } func TestConstFoldCompareuint16(t *testing.T) { { var x uint16 = 0 var y uint16 = 0 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint16 = 0 var y uint16 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x uint16 = 0 var y uint16 = 65535 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x uint16 = 1 var y uint16 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint16 = 1 var y uint16 = 1 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint16 = 1 var y uint16 = 65535 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x uint16 = 65535 var y uint16 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint16 = 65535 var y uint16 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint16 = 65535 var y uint16 = 65535 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } } func TestConstFoldCompareint16(t *testing.T) { { var x int16 = -32768 var y int16 = -32768 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = -32768 var y int16 = -32767 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = -32768 var y int16 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = -32768 var y int16 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = -32768 var y int16 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = -32768 var y int16 = 32766 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = -32768 var y int16 = 32767 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = -32767 var y int16 = -32768 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = -32767 var y int16 = -32767 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = -32767 var y int16 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = -32767 var y int16 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = -32767 var y int16 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = -32767 var y int16 = 32766 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = -32767 var y int16 = 32767 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = -1 var y int16 = -32768 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = -1 var y int16 = -32767 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = -1 var y int16 = -1 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = -1 var y int16 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = -1 var y int16 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = -1 var y int16 = 32766 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = -1 var y int16 = 32767 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = 0 var y int16 = -32768 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 0 var y int16 = -32767 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 0 var y int16 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 0 var y int16 = 0 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 0 var y int16 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = 0 var y int16 = 32766 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = 0 var y int16 = 32767 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = 1 var y int16 = -32768 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 1 var y int16 = -32767 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 1 var y int16 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 1 var y int16 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 1 var y int16 = 1 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 1 var y int16 = 32766 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = 1 var y int16 = 32767 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = 32766 var y int16 = -32768 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 32766 var y int16 = -32767 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 32766 var y int16 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 32766 var y int16 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 32766 var y int16 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 32766 var y int16 = 32766 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 32766 var y int16 = 32767 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int16 = 32767 var y int16 = -32768 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 32767 var y int16 = -32767 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 32767 var y int16 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 32767 var y int16 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 32767 var y int16 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 32767 var y int16 = 32766 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int16 = 32767 var y int16 = 32767 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } } func TestConstFoldCompareuint8(t *testing.T) { { var x uint8 = 0 var y uint8 = 0 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint8 = 0 var y uint8 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x uint8 = 0 var y uint8 = 255 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x uint8 = 1 var y uint8 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint8 = 1 var y uint8 = 1 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint8 = 1 var y uint8 = 255 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x uint8 = 255 var y uint8 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint8 = 255 var y uint8 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x uint8 = 255 var y uint8 = 255 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } } func TestConstFoldCompareint8(t *testing.T) { { var x int8 = -128 var y int8 = -128 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = -128 var y int8 = -127 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = -128 var y int8 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = -128 var y int8 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = -128 var y int8 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = -128 var y int8 = 126 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = -128 var y int8 = 127 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = -127 var y int8 = -128 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = -127 var y int8 = -127 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = -127 var y int8 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = -127 var y int8 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = -127 var y int8 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = -127 var y int8 = 126 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = -127 var y int8 = 127 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = -1 var y int8 = -128 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = -1 var y int8 = -127 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = -1 var y int8 = -1 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = -1 var y int8 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = -1 var y int8 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = -1 var y int8 = 126 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = -1 var y int8 = 127 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = 0 var y int8 = -128 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 0 var y int8 = -127 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 0 var y int8 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 0 var y int8 = 0 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 0 var y int8 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = 0 var y int8 = 126 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = 0 var y int8 = 127 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = 1 var y int8 = -128 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 1 var y int8 = -127 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 1 var y int8 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 1 var y int8 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 1 var y int8 = 1 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 1 var y int8 = 126 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = 1 var y int8 = 127 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = 126 var y int8 = -128 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 126 var y int8 = -127 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 126 var y int8 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 126 var y int8 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 126 var y int8 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 126 var y int8 = 126 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 126 var y int8 = 127 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if !(x < y) { t.Errorf("!(%d < %d)", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if x >= y { t.Errorf("%d >= %d", x, y) } } { var x int8 = 127 var y int8 = -128 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 127 var y int8 = -127 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 127 var y int8 = -1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 127 var y int8 = 0 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 127 var y int8 = 1 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 127 var y int8 = 126 if x == y { t.Errorf("%d == %d", x, y) } if !(x != y) { t.Errorf("!(%d != %d)", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if !(x > y) { t.Errorf("!(%d > %d)", x, y) } if x <= y { t.Errorf("%d <= %d", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } { var x int8 = 127 var y int8 = 127 if !(x == y) { t.Errorf("!(%d == %d)", x, y) } if x != y { t.Errorf("%d != %d", x, y) } if x < y { t.Errorf("%d < %d", x, y) } if x > y { t.Errorf("%d > %d", x, y) } if !(x <= y) { t.Errorf("!(%d <= %d)", x, y) } if !(x >= y) { t.Errorf("!(%d >= %d)", x, y) } } } PK ! �X��� � pgo_devirtualize_test.gonu �[��� // Copyright 2023 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 test import ( "bufio" "fmt" "internal/testenv" "os" "path/filepath" "regexp" "testing" ) type devirtualization struct { pos string callee string } // testPGODevirtualize tests that specific PGO devirtualize rewrites are performed. func testPGODevirtualize(t *testing.T, dir string, want []devirtualization) { testenv.MustHaveGoRun(t) t.Parallel() const pkg = "example.com/pgo/devirtualize" // Add a go.mod so we have a consistent symbol names in this temp dir. goMod := fmt.Sprintf(`module %s go 1.21 `, pkg) if err := os.WriteFile(filepath.Join(dir, "go.mod"), []byte(goMod), 0644); err != nil { t.Fatalf("error writing go.mod: %v", err) } // Run the test without PGO to ensure that the test assertions are // correct even in the non-optimized version. cmd := testenv.CleanCmdEnv(testenv.Command(t, testenv.GoToolPath(t), "test", ".")) cmd.Dir = dir b, err := cmd.CombinedOutput() t.Logf("Test without PGO:\n%s", b) if err != nil { t.Fatalf("Test failed without PGO: %v", err) } // Build the test with the profile. pprof := filepath.Join(dir, "devirt.pprof") gcflag := fmt.Sprintf("-gcflags=-m=2 -pgoprofile=%s -d=pgodebug=3", pprof) out := filepath.Join(dir, "test.exe") cmd = testenv.CleanCmdEnv(testenv.Command(t, testenv.GoToolPath(t), "test", "-o", out, gcflag, ".")) cmd.Dir = dir pr, pw, err := os.Pipe() if err != nil { t.Fatalf("error creating pipe: %v", err) } defer pr.Close() cmd.Stdout = pw cmd.Stderr = pw err = cmd.Start() pw.Close() if err != nil { t.Fatalf("error starting go test: %v", err) } got := make(map[devirtualization]struct{}) devirtualizedLine := regexp.MustCompile(`(.*): PGO devirtualizing \w+ call .* to (.*)`) scanner := bufio.NewScanner(pr) for scanner.Scan() { line := scanner.Text() t.Logf("child: %s", line) m := devirtualizedLine.FindStringSubmatch(line) if m == nil { continue } d := devirtualization{ pos: m[1], callee: m[2], } got[d] = struct{}{} } if err := cmd.Wait(); err != nil { t.Fatalf("error running go test: %v", err) } if err := scanner.Err(); err != nil { t.Fatalf("error reading go test output: %v", err) } if len(got) != len(want) { t.Errorf("mismatched devirtualization count; got %v want %v", got, want) } for _, w := range want { if _, ok := got[w]; ok { continue } t.Errorf("devirtualization %v missing; got %v", w, got) } // Run test with PGO to ensure the assertions are still true. cmd = testenv.CleanCmdEnv(testenv.Command(t, out)) cmd.Dir = dir b, err = cmd.CombinedOutput() t.Logf("Test with PGO:\n%s", b) if err != nil { t.Fatalf("Test failed without PGO: %v", err) } } // TestPGODevirtualize tests that specific functions are devirtualized when PGO // is applied to the exact source that was profiled. func TestPGODevirtualize(t *testing.T) { wd, err := os.Getwd() if err != nil { t.Fatalf("error getting wd: %v", err) } srcDir := filepath.Join(wd, "testdata", "pgo", "devirtualize") // Copy the module to a scratch location so we can add a go.mod. dir := t.TempDir() if err := os.Mkdir(filepath.Join(dir, "mult.pkg"), 0755); err != nil { t.Fatalf("error creating dir: %v", err) } for _, file := range []string{"devirt.go", "devirt_test.go", "devirt.pprof", filepath.Join("mult.pkg", "mult.go")} { if err := copyFile(filepath.Join(dir, file), filepath.Join(srcDir, file)); err != nil { t.Fatalf("error copying %s: %v", file, err) } } want := []devirtualization{ // ExerciseIface { pos: "./devirt.go:101:20", callee: "mult.Mult.Multiply", }, { pos: "./devirt.go:101:39", callee: "Add.Add", }, // ExerciseFuncConcrete { pos: "./devirt.go:173:36", callee: "AddFn", }, { pos: "./devirt.go:173:15", callee: "mult.MultFn", }, // ExerciseFuncField { pos: "./devirt.go:207:35", callee: "AddFn", }, { pos: "./devirt.go:207:19", callee: "mult.MultFn", }, // ExerciseFuncClosure // TODO(prattmic): Closure callees not implemented. //{ // pos: "./devirt.go:249:27", // callee: "AddClosure.func1", //}, //{ // pos: "./devirt.go:249:15", // callee: "mult.MultClosure.func1", //}, } testPGODevirtualize(t, dir, want) } // Regression test for https://go.dev/issue/65615. If a target function changes // from non-generic to generic we can't devirtualize it (don't know the type // parameters), but the compiler should not crash. func TestLookupFuncGeneric(t *testing.T) { wd, err := os.Getwd() if err != nil { t.Fatalf("error getting wd: %v", err) } srcDir := filepath.Join(wd, "testdata", "pgo", "devirtualize") // Copy the module to a scratch location so we can add a go.mod. dir := t.TempDir() if err := os.Mkdir(filepath.Join(dir, "mult.pkg"), 0755); err != nil { t.Fatalf("error creating dir: %v", err) } for _, file := range []string{"devirt.go", "devirt_test.go", "devirt.pprof", filepath.Join("mult.pkg", "mult.go")} { if err := copyFile(filepath.Join(dir, file), filepath.Join(srcDir, file)); err != nil { t.Fatalf("error copying %s: %v", file, err) } } // Change MultFn from a concrete function to a parameterized function. if err := convertMultToGeneric(filepath.Join(dir, "mult.pkg", "mult.go")); err != nil { t.Fatalf("error editing mult.go: %v", err) } // Same as TestPGODevirtualize except for MultFn, which we cannot // devirtualize to because it has become generic. // // Note that the important part of this test is that the build is // successful, not the specific devirtualizations. want := []devirtualization{ // ExerciseIface { pos: "./devirt.go:101:20", callee: "mult.Mult.Multiply", }, { pos: "./devirt.go:101:39", callee: "Add.Add", }, // ExerciseFuncConcrete { pos: "./devirt.go:173:36", callee: "AddFn", }, // ExerciseFuncField { pos: "./devirt.go:207:35", callee: "AddFn", }, // ExerciseFuncClosure // TODO(prattmic): Closure callees not implemented. //{ // pos: "./devirt.go:249:27", // callee: "AddClosure.func1", //}, //{ // pos: "./devirt.go:249:15", // callee: "mult.MultClosure.func1", //}, } testPGODevirtualize(t, dir, want) } var multFnRe = regexp.MustCompile(`func MultFn\(a, b int64\) int64`) func convertMultToGeneric(path string) error { content, err := os.ReadFile(path) if err != nil { return fmt.Errorf("error opening: %w", err) } if !multFnRe.Match(content) { return fmt.Errorf("MultFn not found; update regexp?") } // Users of MultFn shouldn't need adjustment, type inference should // work OK. content = multFnRe.ReplaceAll(content, []byte(`func MultFn[T int32|int64](a, b T) T`)) return os.WriteFile(path, content, 0644) } PK ! >E��0 0 race.gonu �[��� // Copyright 2022 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. //go:build !compiler_bootstrap package test // The racecompile builder only builds packages, but does not build // or run tests. This is a non-test file to hold cases that (used // to) trigger compiler data races, so they will be exercised on // the racecompile builder. // // This package is not imported so functions here are not included // in the actual compiler. // Issue 55357: data race when building multiple instantiations of // generic closures with _ parameters. func Issue55357() { type U struct { A int B string C string } var q T55357[U] q.Count() q.List() type M struct { A int64 B uint32 C uint32 } var q2 T55357[M] q2.Count() q2.List() } type T55357[T any] struct{} //go:noinline func (q *T55357[T]) do(w, v bool, fn func(bk []byte, v T) error) error { return nil } func (q *T55357[T]) Count() (n int, rerr error) { err := q.do(false, false, func(kb []byte, _ T) error { n++ return nil }) return n, err } func (q *T55357[T]) List() (list []T, rerr error) { var l []T err := q.do(false, true, func(_ []byte, v T) error { l = append(l, v) return nil }) if err != nil { return nil, err } return l, nil } PK ! S�jIg g fixedbugs_test.gonu �[��� // 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. package test import ( "internal/testenv" "os" "path/filepath" "strings" "testing" ) type T struct { x [2]int64 // field that will be clobbered. Also makes type not SSAable. p *byte // has a pointer } //go:noinline func makeT() T { return T{} } var g T var sink interface{} func TestIssue15854(t *testing.T) { for i := 0; i < 10000; i++ { if g.x[0] != 0 { t.Fatalf("g.x[0] clobbered with %x\n", g.x[0]) } // The bug was in the following assignment. The return // value of makeT() is not copied out of the args area of // stack frame in a timely fashion. So when write barriers // are enabled, the marshaling of the args for the write // barrier call clobbers the result of makeT() before it is // read by the write barrier code. g = makeT() sink = make([]byte, 1000) // force write barriers to eventually happen } } func TestIssue15854b(t *testing.T) { const N = 10000 a := make([]T, N) for i := 0; i < N; i++ { a = append(a, makeT()) sink = make([]byte, 1000) // force write barriers to eventually happen } for i, v := range a { if v.x[0] != 0 { t.Fatalf("a[%d].x[0] clobbered with %x\n", i, v.x[0]) } } } // Test that the generated assembly has line numbers (Issue #16214). func TestIssue16214(t *testing.T) { testenv.MustHaveGoBuild(t) dir := t.TempDir() src := filepath.Join(dir, "x.go") err := os.WriteFile(src, []byte(issue16214src), 0644) if err != nil { t.Fatalf("could not write file: %v", err) } cmd := testenv.Command(t, testenv.GoToolPath(t), "tool", "compile", "-p=main", "-S", "-o", filepath.Join(dir, "out.o"), src) out, err := cmd.CombinedOutput() if err != nil { t.Fatalf("go tool compile: %v\n%s", err, out) } if strings.Contains(string(out), "unknown line number") { t.Errorf("line number missing in assembly:\n%s", out) } } var issue16214src = ` package main func Mod32(x uint32) uint32 { return x % 3 // frontend rewrites it as HMUL with 2863311531, the LITERAL node has unknown Pos } ` PK ! *�M�<+ <+ inl_test.gonu �[��� // Copyright 2017 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 test import ( "bufio" "internal/goexperiment" "internal/testenv" "io" "math/bits" "regexp" "runtime" "strings" "testing" ) // TestIntendedInlining tests that specific functions are inlined. // This allows refactoring for code clarity and re-use without fear that // changes to the compiler will cause silent performance regressions. func TestIntendedInlining(t *testing.T) { if testing.Short() && testenv.Builder() == "" { t.Skip("skipping in short mode") } testenv.MustHaveGoRun(t) t.Parallel() // want is the list of function names (by package) that should // be inlinable. If they have no callers in their packages, they // might not actually be inlined anywhere. want := map[string][]string{ "runtime": { "add", "acquirem", "add1", "addb", "adjustpanics", "adjustpointer", "alignDown", "alignUp", "bucketMask", "bucketShift", "chanbuf", "evacuated", "fastlog2", "float64bits", "funcspdelta", "getm", "getMCache", "isDirectIface", "itabHashFunc", "nextslicecap", "noescape", "pcvalueCacheKey", "rand32", "readUnaligned32", "readUnaligned64", "releasem", "roundupsize", "stackmapdata", "stringStructOf", "subtract1", "subtractb", "tophash", "(*bmap).keys", "(*bmap).overflow", "(*waitq).enqueue", "funcInfo.entry", // GC-related ones "cgoInRange", "gclinkptr.ptr", "guintptr.ptr", "writeHeapBitsForAddr", "heapBitsSlice", "markBits.isMarked", "muintptr.ptr", "puintptr.ptr", "spanOf", "spanOfUnchecked", "typePointers.nextFast", "(*gcWork).putFast", "(*gcWork).tryGetFast", "(*guintptr).set", "(*markBits).advance", "(*mspan).allocBitsForIndex", "(*mspan).base", "(*mspan).markBitsForBase", "(*mspan).markBitsForIndex", "(*mspan).writeUserArenaHeapBits", "(*muintptr).set", "(*puintptr).set", "(*wbBuf).get1", "(*wbBuf).get2", // Trace-related ones. "traceLocker.ok", "traceEnabled", }, "runtime/internal/sys": {}, "runtime/internal/math": { "MulUintptr", }, "bytes": { "(*Buffer).Bytes", "(*Buffer).Cap", "(*Buffer).Len", "(*Buffer).Grow", "(*Buffer).Next", "(*Buffer).Read", "(*Buffer).ReadByte", "(*Buffer).Reset", "(*Buffer).String", "(*Buffer).UnreadByte", "(*Buffer).tryGrowByReslice", }, "internal/abi": { "UseInterfaceSwitchCache", }, "compress/flate": { "byLiteral.Len", "byLiteral.Less", "byLiteral.Swap", "(*dictDecoder).tryWriteCopy", }, "encoding/base64": { "assemble32", "assemble64", }, "unicode/utf8": { "FullRune", "FullRuneInString", "RuneLen", "AppendRune", "ValidRune", }, "unicode/utf16": { "Decode", }, "reflect": { "Value.Bool", "Value.Bytes", "Value.CanAddr", "Value.CanComplex", "Value.CanFloat", "Value.CanInt", "Value.CanInterface", "Value.CanSet", "Value.CanUint", "Value.Cap", "Value.Complex", "Value.Float", "Value.Int", "Value.Interface", "Value.IsNil", "Value.IsValid", "Value.Kind", "Value.Len", "Value.MapRange", "Value.OverflowComplex", "Value.OverflowFloat", "Value.OverflowInt", "Value.OverflowUint", "Value.String", "Value.Type", "Value.Uint", "Value.UnsafeAddr", "Value.pointer", "add", "align", "flag.mustBe", "flag.mustBeAssignable", "flag.mustBeExported", "flag.kind", "flag.ro", }, "regexp": { "(*bitState).push", }, "math/big": { "bigEndianWord", // The following functions require the math_big_pure_go build tag. "addVW", "subVW", }, "math/rand": { "(*rngSource).Int63", "(*rngSource).Uint64", }, "net": { "(*UDPConn).ReadFromUDP", }, "sync": { // Both OnceFunc and its returned closure need to be inlinable so // that the returned closure can be inlined into the caller of OnceFunc. "OnceFunc", "OnceFunc.func2", // The returned closure. // TODO(austin): It would be good to check OnceValue and OnceValues, // too, but currently they aren't reported because they have type // parameters and aren't instantiated in sync. }, "sync/atomic": { // (*Bool).CompareAndSwap handled below. "(*Bool).Load", "(*Bool).Store", "(*Bool).Swap", "(*Int32).Add", "(*Int32).CompareAndSwap", "(*Int32).Load", "(*Int32).Store", "(*Int32).Swap", "(*Int64).Add", "(*Int64).CompareAndSwap", "(*Int64).Load", "(*Int64).Store", "(*Int64).Swap", "(*Uint32).Add", "(*Uint32).CompareAndSwap", "(*Uint32).Load", "(*Uint32).Store", "(*Uint32).Swap", "(*Uint64).Add", "(*Uint64).CompareAndSwap", "(*Uint64).Load", "(*Uint64).Store", "(*Uint64).Swap", "(*Uintptr).Add", "(*Uintptr).CompareAndSwap", "(*Uintptr).Load", "(*Uintptr).Store", "(*Uintptr).Swap", "(*Pointer[go.shape.int]).CompareAndSwap", "(*Pointer[go.shape.int]).Load", "(*Pointer[go.shape.int]).Store", "(*Pointer[go.shape.int]).Swap", }, } if runtime.GOARCH != "386" && runtime.GOARCH != "loong64" && runtime.GOARCH != "mips64" && runtime.GOARCH != "mips64le" && runtime.GOARCH != "riscv64" { // nextFreeFast calls sys.TrailingZeros64, which on 386 is implemented in asm and is not inlinable. // We currently don't have midstack inlining so nextFreeFast is also not inlinable on 386. // On loong64, mips64x and riscv64, TrailingZeros64 is not intrinsified and causes nextFreeFast // too expensive to inline (Issue 22239). want["runtime"] = append(want["runtime"], "nextFreeFast") // Same behavior for heapBits.nextFast. want["runtime"] = append(want["runtime"], "heapBits.nextFast") } if runtime.GOARCH != "386" { // As explained above, TrailingZeros64 and TrailingZeros32 are not Go code on 386. // The same applies to Bswap32. want["runtime/internal/sys"] = append(want["runtime/internal/sys"], "TrailingZeros64") want["runtime/internal/sys"] = append(want["runtime/internal/sys"], "TrailingZeros32") want["runtime/internal/sys"] = append(want["runtime/internal/sys"], "Bswap32") } if runtime.GOARCH == "amd64" || runtime.GOARCH == "arm64" || runtime.GOARCH == "loong64" || runtime.GOARCH == "mips" || runtime.GOARCH == "mips64" || runtime.GOARCH == "ppc64" || runtime.GOARCH == "riscv64" || runtime.GOARCH == "s390x" { // runtime/internal/atomic.Loaduintptr is only intrinsified on these platforms. want["runtime"] = append(want["runtime"], "traceAcquire") } if bits.UintSize == 64 { // mix is only defined on 64-bit architectures want["runtime"] = append(want["runtime"], "mix") // (*Bool).CompareAndSwap is just over budget on 32-bit systems (386, arm). want["sync/atomic"] = append(want["sync/atomic"], "(*Bool).CompareAndSwap") } switch runtime.GOARCH { case "386", "wasm", "arm": default: // TODO(mvdan): As explained in /test/inline_sync.go, some // architectures don't have atomic intrinsics, so these go over // the inlining budget. Move back to the main table once that // problem is solved. want["sync"] = []string{ "(*Mutex).Lock", "(*Mutex).Unlock", "(*RWMutex).RLock", "(*RWMutex).RUnlock", "(*Once).Do", } } // Functions that must actually be inlined; they must have actual callers. must := map[string]bool{ "compress/flate.byLiteral.Len": true, "compress/flate.byLiteral.Less": true, "compress/flate.byLiteral.Swap": true, } notInlinedReason := make(map[string]string) pkgs := make([]string, 0, len(want)) for pname, fnames := range want { pkgs = append(pkgs, pname) for _, fname := range fnames { fullName := pname + "." + fname if _, ok := notInlinedReason[fullName]; ok { t.Errorf("duplicate func: %s", fullName) } notInlinedReason[fullName] = "unknown reason" } } args := append([]string{"build", "-gcflags=-m -m", "-tags=math_big_pure_go"}, pkgs...) cmd := testenv.CleanCmdEnv(testenv.Command(t, testenv.GoToolPath(t), args...)) pr, pw := io.Pipe() cmd.Stdout = pw cmd.Stderr = pw cmdErr := make(chan error, 1) go func() { cmdErr <- cmd.Run() pw.Close() }() scanner := bufio.NewScanner(pr) curPkg := "" canInline := regexp.MustCompile(`: can inline ([^ ]*)`) haveInlined := regexp.MustCompile(`: inlining call to ([^ ]*)`) cannotInline := regexp.MustCompile(`: cannot inline ([^ ]*): (.*)`) for scanner.Scan() { line := scanner.Text() if strings.HasPrefix(line, "# ") { curPkg = line[2:] continue } if m := haveInlined.FindStringSubmatch(line); m != nil { fname := m[1] delete(notInlinedReason, curPkg+"."+fname) continue } if m := canInline.FindStringSubmatch(line); m != nil { fname := m[1] fullname := curPkg + "." + fname // If function must be inlined somewhere, being inlinable is not enough if _, ok := must[fullname]; !ok { delete(notInlinedReason, fullname) continue } } if m := cannotInline.FindStringSubmatch(line); m != nil { fname, reason := m[1], m[2] fullName := curPkg + "." + fname if _, ok := notInlinedReason[fullName]; ok { // cmd/compile gave us a reason why notInlinedReason[fullName] = reason } continue } } if err := <-cmdErr; err != nil { t.Fatal(err) } if err := scanner.Err(); err != nil { t.Fatal(err) } for fullName, reason := range notInlinedReason { t.Errorf("%s was not inlined: %s", fullName, reason) } } func collectInlCands(msgs string) map[string]struct{} { rv := make(map[string]struct{}) lines := strings.Split(msgs, "\n") re := regexp.MustCompile(`^\S+\s+can\s+inline\s+(\S+)`) for _, line := range lines { m := re.FindStringSubmatch(line) if m != nil { rv[m[1]] = struct{}{} } } return rv } func TestIssue56044(t *testing.T) { if testing.Short() { t.Skipf("skipping test: too long for short mode") } if !goexperiment.CoverageRedesign { t.Skipf("skipping new coverage tests (experiment not enabled)") } testenv.MustHaveGoBuild(t) modes := []string{"-covermode=set", "-covermode=atomic"} for _, mode := range modes { // Build the Go runtime with "-m", capturing output. args := []string{"build", "-gcflags=runtime=-m", "runtime"} cmd := testenv.Command(t, testenv.GoToolPath(t), args...) b, err := cmd.CombinedOutput() if err != nil { t.Fatalf("build failed (%v): %s", err, b) } mbase := collectInlCands(string(b)) // Redo the build with -cover, also with "-m". args = []string{"build", "-gcflags=runtime=-m", mode, "runtime"} cmd = testenv.Command(t, testenv.GoToolPath(t), args...) b, err = cmd.CombinedOutput() if err != nil { t.Fatalf("build failed (%v): %s", err, b) } mcov := collectInlCands(string(b)) // Make sure that there aren't any functions that are marked // as inline candidates at base but not with coverage. for k := range mbase { if _, ok := mcov[k]; !ok { t.Errorf("error: did not find %s in coverage -m output", k) } } } } PK ! ݂ U U dep_test.gonu �[��� // Copyright 2019 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 test import ( "internal/testenv" "strings" "testing" ) func TestDeps(t *testing.T) { out, err := testenv.Command(t, testenv.GoToolPath(t), "list", "-f", "{{.Deps}}", "cmd/compile/internal/gc").Output() if err != nil { t.Fatal(err) } for _, dep := range strings.Fields(strings.Trim(string(out), "[]")) { switch dep { case "go/build", "go/scanner": // cmd/compile/internal/importer introduces a dependency // on go/build and go/token; cmd/compile/internal/ uses // go/constant which uses go/token in its API. Once we // got rid of those dependencies, enable this check again. // TODO(gri) fix this // t.Errorf("undesired dependency on %q", dep) } } } PK ! �� H H align_test.gonu �[��� // Copyright 2021 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. // Test to make sure that equality functions (and hash // functions) don't do unaligned reads on architectures // that can't do unaligned reads. See issue 46283. package test import "testing" type T1 struct { x float32 a, b, c, d int16 // memequal64 } type T2 struct { x float32 a, b, c, d int32 // memequal128 } type A2 [2]byte // eq uses a 2-byte load type A4 [4]byte // eq uses a 4-byte load type A8 [8]byte // eq uses an 8-byte load //go:noinline func cmpT1(p, q *T1) { if *p != *q { panic("comparison test wrong") } } //go:noinline func cmpT2(p, q *T2) { if *p != *q { panic("comparison test wrong") } } //go:noinline func cmpA2(p, q *A2) { if *p != *q { panic("comparison test wrong") } } //go:noinline func cmpA4(p, q *A4) { if *p != *q { panic("comparison test wrong") } } //go:noinline func cmpA8(p, q *A8) { if *p != *q { panic("comparison test wrong") } } func TestAlignEqual(t *testing.T) { cmpT1(&T1{}, &T1{}) cmpT2(&T2{}, &T2{}) m1 := map[T1]bool{} m1[T1{}] = true m1[T1{}] = false if len(m1) != 1 { t.Fatalf("len(m1)=%d, want 1", len(m1)) } m2 := map[T2]bool{} m2[T2{}] = true m2[T2{}] = false if len(m2) != 1 { t.Fatalf("len(m2)=%d, want 1", len(m2)) } type X2 struct { y byte z A2 } var x2 X2 cmpA2(&x2.z, &A2{}) type X4 struct { y byte z A4 } var x4 X4 cmpA4(&x4.z, &A4{}) type X8 struct { y byte z A8 } var x8 X8 cmpA8(&x8.z, &A8{}) } PK ! 2M\�� � READMEnu �[��� This directory holds small tests and benchmarks of code generated by the compiler. This code is not for importing, and the tests are intended to verify that specific optimzations are applied and correct. PK ! y���mf mf shift_test.gonu �[��� // 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. package test import ( "reflect" "testing" ) // Tests shifts of zero. //go:noinline func ofz64l64(n uint64) int64 { var x int64 return x << n } //go:noinline func ofz64l32(n uint32) int64 { var x int64 return x << n } //go:noinline func ofz64l16(n uint16) int64 { var x int64 return x << n } //go:noinline func ofz64l8(n uint8) int64 { var x int64 return x << n } //go:noinline func ofz64r64(n uint64) int64 { var x int64 return x >> n } //go:noinline func ofz64r32(n uint32) int64 { var x int64 return x >> n } //go:noinline func ofz64r16(n uint16) int64 { var x int64 return x >> n } //go:noinline func ofz64r8(n uint8) int64 { var x int64 return x >> n } //go:noinline func ofz64ur64(n uint64) uint64 { var x uint64 return x >> n } //go:noinline func ofz64ur32(n uint32) uint64 { var x uint64 return x >> n } //go:noinline func ofz64ur16(n uint16) uint64 { var x uint64 return x >> n } //go:noinline func ofz64ur8(n uint8) uint64 { var x uint64 return x >> n } //go:noinline func ofz32l64(n uint64) int32 { var x int32 return x << n } //go:noinline func ofz32l32(n uint32) int32 { var x int32 return x << n } //go:noinline func ofz32l16(n uint16) int32 { var x int32 return x << n } //go:noinline func ofz32l8(n uint8) int32 { var x int32 return x << n } //go:noinline func ofz32r64(n uint64) int32 { var x int32 return x >> n } //go:noinline func ofz32r32(n uint32) int32 { var x int32 return x >> n } //go:noinline func ofz32r16(n uint16) int32 { var x int32 return x >> n } //go:noinline func ofz32r8(n uint8) int32 { var x int32 return x >> n } //go:noinline func ofz32ur64(n uint64) uint32 { var x uint32 return x >> n } //go:noinline func ofz32ur32(n uint32) uint32 { var x uint32 return x >> n } //go:noinline func ofz32ur16(n uint16) uint32 { var x uint32 return x >> n } //go:noinline func ofz32ur8(n uint8) uint32 { var x uint32 return x >> n } //go:noinline func ofz16l64(n uint64) int16 { var x int16 return x << n } //go:noinline func ofz16l32(n uint32) int16 { var x int16 return x << n } //go:noinline func ofz16l16(n uint16) int16 { var x int16 return x << n } //go:noinline func ofz16l8(n uint8) int16 { var x int16 return x << n } //go:noinline func ofz16r64(n uint64) int16 { var x int16 return x >> n } //go:noinline func ofz16r32(n uint32) int16 { var x int16 return x >> n } //go:noinline func ofz16r16(n uint16) int16 { var x int16 return x >> n } //go:noinline func ofz16r8(n uint8) int16 { var x int16 return x >> n } //go:noinline func ofz16ur64(n uint64) uint16 { var x uint16 return x >> n } //go:noinline func ofz16ur32(n uint32) uint16 { var x uint16 return x >> n } //go:noinline func ofz16ur16(n uint16) uint16 { var x uint16 return x >> n } //go:noinline func ofz16ur8(n uint8) uint16 { var x uint16 return x >> n } //go:noinline func ofz8l64(n uint64) int8 { var x int8 return x << n } //go:noinline func ofz8l32(n uint32) int8 { var x int8 return x << n } //go:noinline func ofz8l16(n uint16) int8 { var x int8 return x << n } //go:noinline func ofz8l8(n uint8) int8 { var x int8 return x << n } //go:noinline func ofz8r64(n uint64) int8 { var x int8 return x >> n } //go:noinline func ofz8r32(n uint32) int8 { var x int8 return x >> n } //go:noinline func ofz8r16(n uint16) int8 { var x int8 return x >> n } //go:noinline func ofz8r8(n uint8) int8 { var x int8 return x >> n } //go:noinline func ofz8ur64(n uint64) uint8 { var x uint8 return x >> n } //go:noinline func ofz8ur32(n uint32) uint8 { var x uint8 return x >> n } //go:noinline func ofz8ur16(n uint16) uint8 { var x uint8 return x >> n } //go:noinline func ofz8ur8(n uint8) uint8 { var x uint8 return x >> n } func TestShiftOfZero(t *testing.T) { if got := ofz64l64(5); got != 0 { t.Errorf("0<<5 == %d, want 0", got) } if got := ofz64l32(5); got != 0 { t.Errorf("0<<5 == %d, want 0", got) } if got := ofz64l16(5); got != 0 { t.Errorf("0<<5 == %d, want 0", got) } if got := ofz64l8(5); got != 0 { t.Errorf("0<<5 == %d, want 0", got) } if got := ofz64r64(5); got != 0 { t.Errorf("0>>5 == %d, want 0", got) } if got := ofz64r32(5); got != 0 { t.Errorf("0>>5 == %d, want 0", got) } if got := ofz64r16(5); got != 0 { t.Errorf("0>>5 == %d, want 0", got) } if got := ofz64r8(5); got != 0 { t.Errorf("0>>5 == %d, want 0", got) } if got := ofz64ur64(5); got != 0 { t.Errorf("0>>>5 == %d, want 0", got) } if got := ofz64ur32(5); got != 0 { t.Errorf("0>>>5 == %d, want 0", got) } if got := ofz64ur16(5); got != 0 { t.Errorf("0>>>5 == %d, want 0", got) } if got := ofz64ur8(5); got != 0 { t.Errorf("0>>>5 == %d, want 0", got) } if got := ofz32l64(5); got != 0 { t.Errorf("0<<5 == %d, want 0", got) } if got := ofz32l32(5); got != 0 { t.Errorf("0<<5 == %d, want 0", got) } if got := ofz32l16(5); got != 0 { t.Errorf("0<<5 == %d, want 0", got) } if got := ofz32l8(5); got != 0 { t.Errorf("0<<5 == %d, want 0", got) } if got := ofz32r64(5); got != 0 { t.Errorf("0>>5 == %d, want 0", got) } if got := ofz32r32(5); got != 0 { t.Errorf("0>>5 == %d, want 0", got) } if got := ofz32r16(5); got != 0 { t.Errorf("0>>5 == %d, want 0", got) } if got := ofz32r8(5); got != 0 { t.Errorf("0>>5 == %d, want 0", got) } if got := ofz32ur64(5); got != 0 { t.Errorf("0>>>5 == %d, want 0", got) } if got := ofz32ur32(5); got != 0 { t.Errorf("0>>>5 == %d, want 0", got) } if got := ofz32ur16(5); got != 0 { t.Errorf("0>>>5 == %d, want 0", got) } if got := ofz32ur8(5); got != 0 { t.Errorf("0>>>5 == %d, want 0", got) } if got := ofz16l64(5); got != 0 { t.Errorf("0<<5 == %d, want 0", got) } if got := ofz16l32(5); got != 0 { t.Errorf("0<<5 == %d, want 0", got) } if got := ofz16l16(5); got != 0 { t.Errorf("0<<5 == %d, want 0", got) } if got := ofz16l8(5); got != 0 { t.Errorf("0<<5 == %d, want 0", got) } if got := ofz16r64(5); got != 0 { t.Errorf("0>>5 == %d, want 0", got) } if got := ofz16r32(5); got != 0 { t.Errorf("0>>5 == %d, want 0", got) } if got := ofz16r16(5); got != 0 { t.Errorf("0>>5 == %d, want 0", got) } if got := ofz16r8(5); got != 0 { t.Errorf("0>>5 == %d, want 0", got) } if got := ofz16ur64(5); got != 0 { t.Errorf("0>>>5 == %d, want 0", got) } if got := ofz16ur32(5); got != 0 { t.Errorf("0>>>5 == %d, want 0", got) } if got := ofz16ur16(5); got != 0 { t.Errorf("0>>>5 == %d, want 0", got) } if got := ofz16ur8(5); got != 0 { t.Errorf("0>>>5 == %d, want 0", got) } if got := ofz8l64(5); got != 0 { t.Errorf("0<<5 == %d, want 0", got) } if got := ofz8l32(5); got != 0 { t.Errorf("0<<5 == %d, want 0", got) } if got := ofz8l16(5); got != 0 { t.Errorf("0<<5 == %d, want 0", got) } if got := ofz8l8(5); got != 0 { t.Errorf("0<<5 == %d, want 0", got) } if got := ofz8r64(5); got != 0 { t.Errorf("0>>5 == %d, want 0", got) } if got := ofz8r32(5); got != 0 { t.Errorf("0>>5 == %d, want 0", got) } if got := ofz8r16(5); got != 0 { t.Errorf("0>>5 == %d, want 0", got) } if got := ofz8r8(5); got != 0 { t.Errorf("0>>5 == %d, want 0", got) } if got := ofz8ur64(5); got != 0 { t.Errorf("0>>>5 == %d, want 0", got) } if got := ofz8ur32(5); got != 0 { t.Errorf("0>>>5 == %d, want 0", got) } if got := ofz8ur16(5); got != 0 { t.Errorf("0>>>5 == %d, want 0", got) } if got := ofz8ur8(5); got != 0 { t.Errorf("0>>>5 == %d, want 0", got) } } //go:noinline func byz64l(n int64) int64 { return n << 0 } //go:noinline func byz64r(n int64) int64 { return n >> 0 } //go:noinline func byz64ur(n uint64) uint64 { return n >> 0 } //go:noinline func byz32l(n int32) int32 { return n << 0 } //go:noinline func byz32r(n int32) int32 { return n >> 0 } //go:noinline func byz32ur(n uint32) uint32 { return n >> 0 } //go:noinline func byz16l(n int16) int16 { return n << 0 } //go:noinline func byz16r(n int16) int16 { return n >> 0 } //go:noinline func byz16ur(n uint16) uint16 { return n >> 0 } //go:noinline func byz8l(n int8) int8 { return n << 0 } //go:noinline func byz8r(n int8) int8 { return n >> 0 } //go:noinline func byz8ur(n uint8) uint8 { return n >> 0 } func TestShiftByZero(t *testing.T) { { var n int64 = 0x5555555555555555 if got := byz64l(n); got != n { t.Errorf("%x<<0 == %x, want %x", n, got, n) } if got := byz64r(n); got != n { t.Errorf("%x>>0 == %x, want %x", n, got, n) } } { var n uint64 = 0xaaaaaaaaaaaaaaaa if got := byz64ur(n); got != n { t.Errorf("%x>>>0 == %x, want %x", n, got, n) } } { var n int32 = 0x55555555 if got := byz32l(n); got != n { t.Errorf("%x<<0 == %x, want %x", n, got, n) } if got := byz32r(n); got != n { t.Errorf("%x>>0 == %x, want %x", n, got, n) } } { var n uint32 = 0xaaaaaaaa if got := byz32ur(n); got != n { t.Errorf("%x>>>0 == %x, want %x", n, got, n) } } { var n int16 = 0x5555 if got := byz16l(n); got != n { t.Errorf("%x<<0 == %x, want %x", n, got, n) } if got := byz16r(n); got != n { t.Errorf("%x>>0 == %x, want %x", n, got, n) } } { var n uint16 = 0xaaaa if got := byz16ur(n); got != n { t.Errorf("%x>>>0 == %x, want %x", n, got, n) } } { var n int8 = 0x55 if got := byz8l(n); got != n { t.Errorf("%x<<0 == %x, want %x", n, got, n) } if got := byz8r(n); got != n { t.Errorf("%x>>0 == %x, want %x", n, got, n) } } { var n uint8 = 0x55 if got := byz8ur(n); got != n { t.Errorf("%x>>>0 == %x, want %x", n, got, n) } } } //go:noinline func two64l(x int64) int64 { return x << 1 << 1 } //go:noinline func two64r(x int64) int64 { return x >> 1 >> 1 } //go:noinline func two64ur(x uint64) uint64 { return x >> 1 >> 1 } //go:noinline func two32l(x int32) int32 { return x << 1 << 1 } //go:noinline func two32r(x int32) int32 { return x >> 1 >> 1 } //go:noinline func two32ur(x uint32) uint32 { return x >> 1 >> 1 } //go:noinline func two16l(x int16) int16 { return x << 1 << 1 } //go:noinline func two16r(x int16) int16 { return x >> 1 >> 1 } //go:noinline func two16ur(x uint16) uint16 { return x >> 1 >> 1 } //go:noinline func two8l(x int8) int8 { return x << 1 << 1 } //go:noinline func two8r(x int8) int8 { return x >> 1 >> 1 } //go:noinline func two8ur(x uint8) uint8 { return x >> 1 >> 1 } func TestShiftCombine(t *testing.T) { if got, want := two64l(4), int64(16); want != got { t.Errorf("4<<1<<1 == %d, want %d", got, want) } if got, want := two64r(64), int64(16); want != got { t.Errorf("64>>1>>1 == %d, want %d", got, want) } if got, want := two64ur(64), uint64(16); want != got { t.Errorf("64>>1>>1 == %d, want %d", got, want) } if got, want := two32l(4), int32(16); want != got { t.Errorf("4<<1<<1 == %d, want %d", got, want) } if got, want := two32r(64), int32(16); want != got { t.Errorf("64>>1>>1 == %d, want %d", got, want) } if got, want := two32ur(64), uint32(16); want != got { t.Errorf("64>>1>>1 == %d, want %d", got, want) } if got, want := two16l(4), int16(16); want != got { t.Errorf("4<<1<<1 == %d, want %d", got, want) } if got, want := two16r(64), int16(16); want != got { t.Errorf("64>>1>>1 == %d, want %d", got, want) } if got, want := two16ur(64), uint16(16); want != got { t.Errorf("64>>1>>1 == %d, want %d", got, want) } if got, want := two8l(4), int8(16); want != got { t.Errorf("4<<1<<1 == %d, want %d", got, want) } if got, want := two8r(64), int8(16); want != got { t.Errorf("64>>1>>1 == %d, want %d", got, want) } if got, want := two8ur(64), uint8(16); want != got { t.Errorf("64>>1>>1 == %d, want %d", got, want) } } //go:noinline func three64l(x int64) int64 { return x << 3 >> 1 << 2 } //go:noinline func three64ul(x uint64) uint64 { return x << 3 >> 1 << 2 } //go:noinline func three64r(x int64) int64 { return x >> 3 << 1 >> 2 } //go:noinline func three64ur(x uint64) uint64 { return x >> 3 << 1 >> 2 } //go:noinline func three32l(x int32) int32 { return x << 3 >> 1 << 2 } //go:noinline func three32ul(x uint32) uint32 { return x << 3 >> 1 << 2 } //go:noinline func three32r(x int32) int32 { return x >> 3 << 1 >> 2 } //go:noinline func three32ur(x uint32) uint32 { return x >> 3 << 1 >> 2 } //go:noinline func three16l(x int16) int16 { return x << 3 >> 1 << 2 } //go:noinline func three16ul(x uint16) uint16 { return x << 3 >> 1 << 2 } //go:noinline func three16r(x int16) int16 { return x >> 3 << 1 >> 2 } //go:noinline func three16ur(x uint16) uint16 { return x >> 3 << 1 >> 2 } //go:noinline func three8l(x int8) int8 { return x << 3 >> 1 << 2 } //go:noinline func three8ul(x uint8) uint8 { return x << 3 >> 1 << 2 } //go:noinline func three8r(x int8) int8 { return x >> 3 << 1 >> 2 } //go:noinline func three8ur(x uint8) uint8 { return x >> 3 << 1 >> 2 } func TestShiftCombine3(t *testing.T) { if got, want := three64l(4), int64(64); want != got { t.Errorf("4<<1<<1 == %d, want %d", got, want) } if got, want := three64ul(4), uint64(64); want != got { t.Errorf("4<<1<<1 == %d, want %d", got, want) } if got, want := three64r(64), int64(4); want != got { t.Errorf("64>>1>>1 == %d, want %d", got, want) } if got, want := three64ur(64), uint64(4); want != got { t.Errorf("64>>1>>1 == %d, want %d", got, want) } if got, want := three32l(4), int32(64); want != got { t.Errorf("4<<1<<1 == %d, want %d", got, want) } if got, want := three32ul(4), uint32(64); want != got { t.Errorf("4<<1<<1 == %d, want %d", got, want) } if got, want := three32r(64), int32(4); want != got { t.Errorf("64>>1>>1 == %d, want %d", got, want) } if got, want := three32ur(64), uint32(4); want != got { t.Errorf("64>>1>>1 == %d, want %d", got, want) } if got, want := three16l(4), int16(64); want != got { t.Errorf("4<<1<<1 == %d, want %d", got, want) } if got, want := three16ul(4), uint16(64); want != got { t.Errorf("4<<1<<1 == %d, want %d", got, want) } if got, want := three16r(64), int16(4); want != got { t.Errorf("64>>1>>1 == %d, want %d", got, want) } if got, want := three16ur(64), uint16(4); want != got { t.Errorf("64>>1>>1 == %d, want %d", got, want) } if got, want := three8l(4), int8(64); want != got { t.Errorf("4<<1<<1 == %d, want %d", got, want) } if got, want := three8ul(4), uint8(64); want != got { t.Errorf("4<<1<<1 == %d, want %d", got, want) } if got, want := three8r(64), int8(4); want != got { t.Errorf("64>>1>>1 == %d, want %d", got, want) } if got, want := three8ur(64), uint8(4); want != got { t.Errorf("64>>1>>1 == %d, want %d", got, want) } } var ( one64 int64 = 1 one64u uint64 = 1 one32 int32 = 1 one32u uint32 = 1 one16 int16 = 1 one16u uint16 = 1 one8 int8 = 1 one8u uint8 = 1 ) func TestShiftLargeCombine(t *testing.T) { var N uint64 = 0x8000000000000000 if one64<<N<<N == 1 { t.Errorf("shift overflow mishandled") } if one64>>N>>N == 1 { t.Errorf("shift overflow mishandled") } if one64u>>N>>N == 1 { t.Errorf("shift overflow mishandled") } if one32<<N<<N == 1 { t.Errorf("shift overflow mishandled") } if one32>>N>>N == 1 { t.Errorf("shift overflow mishandled") } if one32u>>N>>N == 1 { t.Errorf("shift overflow mishandled") } if one16<<N<<N == 1 { t.Errorf("shift overflow mishandled") } if one16>>N>>N == 1 { t.Errorf("shift overflow mishandled") } if one16u>>N>>N == 1 { t.Errorf("shift overflow mishandled") } if one8<<N<<N == 1 { t.Errorf("shift overflow mishandled") } if one8>>N>>N == 1 { t.Errorf("shift overflow mishandled") } if one8u>>N>>N == 1 { t.Errorf("shift overflow mishandled") } } func TestShiftLargeCombine3(t *testing.T) { var N uint64 = 0x8000000000000001 if one64<<N>>2<<N == 1 { t.Errorf("shift overflow mishandled") } if one64u<<N>>2<<N == 1 { t.Errorf("shift overflow mishandled") } if one64>>N<<2>>N == 1 { t.Errorf("shift overflow mishandled") } if one64u>>N<<2>>N == 1 { t.Errorf("shift overflow mishandled") } if one32<<N>>2<<N == 1 { t.Errorf("shift overflow mishandled") } if one32u<<N>>2<<N == 1 { t.Errorf("shift overflow mishandled") } if one32>>N<<2>>N == 1 { t.Errorf("shift overflow mishandled") } if one32u>>N<<2>>N == 1 { t.Errorf("shift overflow mishandled") } if one16<<N>>2<<N == 1 { t.Errorf("shift overflow mishandled") } if one16u<<N>>2<<N == 1 { t.Errorf("shift overflow mishandled") } if one16>>N<<2>>N == 1 { t.Errorf("shift overflow mishandled") } if one16u>>N<<2>>N == 1 { t.Errorf("shift overflow mishandled") } if one8<<N>>2<<N == 1 { t.Errorf("shift overflow mishandled") } if one8u<<N>>2<<N == 1 { t.Errorf("shift overflow mishandled") } if one8>>N<<2>>N == 1 { t.Errorf("shift overflow mishandled") } if one8u>>N<<2>>N == 1 { t.Errorf("shift overflow mishandled") } } func TestShiftGeneric(t *testing.T) { for _, test := range [...]struct { valueWidth int signed bool shiftWidth int left bool f interface{} }{ {64, true, 64, true, func(n int64, s uint64) int64 { return n << s }}, {64, true, 64, false, func(n int64, s uint64) int64 { return n >> s }}, {64, false, 64, false, func(n uint64, s uint64) uint64 { return n >> s }}, {64, true, 32, true, func(n int64, s uint32) int64 { return n << s }}, {64, true, 32, false, func(n int64, s uint32) int64 { return n >> s }}, {64, false, 32, false, func(n uint64, s uint32) uint64 { return n >> s }}, {64, true, 16, true, func(n int64, s uint16) int64 { return n << s }}, {64, true, 16, false, func(n int64, s uint16) int64 { return n >> s }}, {64, false, 16, false, func(n uint64, s uint16) uint64 { return n >> s }}, {64, true, 8, true, func(n int64, s uint8) int64 { return n << s }}, {64, true, 8, false, func(n int64, s uint8) int64 { return n >> s }}, {64, false, 8, false, func(n uint64, s uint8) uint64 { return n >> s }}, {32, true, 64, true, func(n int32, s uint64) int32 { return n << s }}, {32, true, 64, false, func(n int32, s uint64) int32 { return n >> s }}, {32, false, 64, false, func(n uint32, s uint64) uint32 { return n >> s }}, {32, true, 32, true, func(n int32, s uint32) int32 { return n << s }}, {32, true, 32, false, func(n int32, s uint32) int32 { return n >> s }}, {32, false, 32, false, func(n uint32, s uint32) uint32 { return n >> s }}, {32, true, 16, true, func(n int32, s uint16) int32 { return n << s }}, {32, true, 16, false, func(n int32, s uint16) int32 { return n >> s }}, {32, false, 16, false, func(n uint32, s uint16) uint32 { return n >> s }}, {32, true, 8, true, func(n int32, s uint8) int32 { return n << s }}, {32, true, 8, false, func(n int32, s uint8) int32 { return n >> s }}, {32, false, 8, false, func(n uint32, s uint8) uint32 { return n >> s }}, {16, true, 64, true, func(n int16, s uint64) int16 { return n << s }}, {16, true, 64, false, func(n int16, s uint64) int16 { return n >> s }}, {16, false, 64, false, func(n uint16, s uint64) uint16 { return n >> s }}, {16, true, 32, true, func(n int16, s uint32) int16 { return n << s }}, {16, true, 32, false, func(n int16, s uint32) int16 { return n >> s }}, {16, false, 32, false, func(n uint16, s uint32) uint16 { return n >> s }}, {16, true, 16, true, func(n int16, s uint16) int16 { return n << s }}, {16, true, 16, false, func(n int16, s uint16) int16 { return n >> s }}, {16, false, 16, false, func(n uint16, s uint16) uint16 { return n >> s }}, {16, true, 8, true, func(n int16, s uint8) int16 { return n << s }}, {16, true, 8, false, func(n int16, s uint8) int16 { return n >> s }}, {16, false, 8, false, func(n uint16, s uint8) uint16 { return n >> s }}, {8, true, 64, true, func(n int8, s uint64) int8 { return n << s }}, {8, true, 64, false, func(n int8, s uint64) int8 { return n >> s }}, {8, false, 64, false, func(n uint8, s uint64) uint8 { return n >> s }}, {8, true, 32, true, func(n int8, s uint32) int8 { return n << s }}, {8, true, 32, false, func(n int8, s uint32) int8 { return n >> s }}, {8, false, 32, false, func(n uint8, s uint32) uint8 { return n >> s }}, {8, true, 16, true, func(n int8, s uint16) int8 { return n << s }}, {8, true, 16, false, func(n int8, s uint16) int8 { return n >> s }}, {8, false, 16, false, func(n uint8, s uint16) uint8 { return n >> s }}, {8, true, 8, true, func(n int8, s uint8) int8 { return n << s }}, {8, true, 8, false, func(n int8, s uint8) int8 { return n >> s }}, {8, false, 8, false, func(n uint8, s uint8) uint8 { return n >> s }}, } { fv := reflect.ValueOf(test.f) var args [2]reflect.Value for i := 0; i < test.valueWidth; i++ { // Build value to be shifted. var n int64 = 1 for j := 0; j < i; j++ { n <<= 1 } args[0] = reflect.ValueOf(n).Convert(fv.Type().In(0)) for s := 0; s <= test.shiftWidth; s++ { args[1] = reflect.ValueOf(s).Convert(fv.Type().In(1)) // Compute desired result. We're testing variable shifts // assuming constant shifts are correct. r := n var op string switch { case test.left: op = "<<" for j := 0; j < s; j++ { r <<= 1 } switch test.valueWidth { case 32: r = int64(int32(r)) case 16: r = int64(int16(r)) case 8: r = int64(int8(r)) } case test.signed: op = ">>" switch test.valueWidth { case 32: r = int64(int32(r)) case 16: r = int64(int16(r)) case 8: r = int64(int8(r)) } for j := 0; j < s; j++ { r >>= 1 } default: op = ">>>" for j := 0; j < s; j++ { r = int64(uint64(r) >> 1) } } // Call function. res := fv.Call(args[:])[0].Convert(reflect.ValueOf(r).Type()) if res.Int() != r { t.Errorf("%s%dx%d(%x,%x)=%x, want %x", op, test.valueWidth, test.shiftWidth, n, s, res.Int(), r) } } } } } var shiftSink64 int64 func BenchmarkShiftArithmeticRight(b *testing.B) { x := shiftSink64 for i := 0; i < b.N; i++ { x = x >> (i & 63) } shiftSink64 = x } //go:noinline func incorrectRotate1(x, c uint64) uint64 { // This should not compile to a rotate instruction. return x<<c | x>>(64-c) } //go:noinline func incorrectRotate2(x uint64) uint64 { var c uint64 = 66 // This should not compile to a rotate instruction. return x<<c | x>>(64-c) } func TestIncorrectRotate(t *testing.T) { if got := incorrectRotate1(1, 66); got != 0 { t.Errorf("got %x want 0", got) } if got := incorrectRotate2(1); got != 0 { t.Errorf("got %x want 0", got) } } //go:noinline func variableShiftOverflow64x8(x int64, y, z uint8) (a, b, c int64) { // Verify junk bits are ignored when doing a variable shift. return x >> (y + z), x << (y + z), int64(uint64(x) >> (y + z)) } //go:noinline func variableShiftOverflow32x8(x int32, y, z uint8) (a, b, c int32) { // Verify junk bits are ignored when doing a variable shift. return x >> (y + z), x << (y + z), int32(uint32(x) >> (y + z)) } //go:noinline func variableShiftOverflow16x8(x int16, y, z uint8) (a, b, c int16) { // Verify junk bits are ignored when doing a variable shift. return x >> (y + z), x << (y + z), int16(uint16(x) >> (y + z)) } //go:noinline func variableShiftOverflow8x8(x int8, y, z uint8) (a, b, c int8) { // Verify junk bits are ignored when doing a variable shift. return x >> (y + z), x << (y + z), int8(uint8(x) >> (y + z)) } //go:noinline func variableShiftOverflow64x16(x int64, y, z uint16) (a, b, c int64) { // Verify junk bits are ignored when doing a variable shift. return x >> (y + z), x << (y + z), int64(uint64(x) >> (y + z)) } //go:noinline func variableShiftOverflow32x16(x int32, y, z uint16) (a, b, c int32) { // Verify junk bits are ignored when doing a variable shift. return x >> (y + z), x << (y + z), int32(uint32(x) >> (y + z)) } //go:noinline func variableShiftOverflow16x16(x int16, y, z uint16) (a, b, c int16) { // Verify junk bits are ignored when doing a variable shift. return x >> (y + z), x << (y + z), int16(uint16(x) >> (y + z)) } //go:noinline func variableShiftOverflow8x16(x int8, y, z uint16) (a, b, c int8) { // Verify junk bits are ignored when doing a variable shift. return x >> (y + z), x << (y + z), int8(uint8(x) >> (y + z)) } //go:noinline func makeU8(x uint64) uint8 { // Ensure the upper portions of the register are clear before testing large shift values // using non-native types (e.g uint8 on PPC64). return uint8(x) } //go:noinline func makeU16(x uint64) uint16 { // Ensure the upper portions of the register are clear before testing large shift values // using non-native types (e.g uint8 on PPC64). return uint16(x) } func TestShiftOverflow(t *testing.T) { if v, w, z := variableShiftOverflow64x8(-64, makeU8(255), 2); v != -32 || w != -128 || z != 0x7fffffffffffffe0 { t.Errorf("got %d %d 0x%x, expected -32 -128 0x7fffffffffffffe0", v, w, z) } if v, w, z := variableShiftOverflow32x8(-64, makeU8(255), 2); v != -32 || w != -128 || z != 0x7fffffe0 { t.Errorf("got %d %d 0x%x, expected -32 -128 0x7fffffe0", v, w, z) } if v, w, z := variableShiftOverflow16x8(-64, makeU8(255), 2); v != -32 || w != -128 || z != 0x7fe0 { t.Errorf("got %d %d 0x%x, expected -32 -128 0x7fe0", v, w, z) } if v, w, z := variableShiftOverflow8x8(-64, makeU8(255), 2); v != -32 || w != -128 || z != 0x60 { t.Errorf("got %d %d 0x%x, expected -32 -128 0x60", v, w, z) } if v, w, z := variableShiftOverflow64x16(-64, makeU16(0xffff), 2); v != -32 || w != -128 || z != 0x7fffffffffffffe0 { t.Errorf("got %d %d 0x%x, expected -32 -128 0x7fffffffffffffe0", v, w, z) } if v, w, z := variableShiftOverflow32x16(-64, makeU16(0xffff), 2); v != -32 || w != -128 || z != 0x7fffffe0 { t.Errorf("got %d %d 0x%x, expected -32 -128 0x7fffffe0,", v, w, z) } if v, w, z := variableShiftOverflow16x16(-64, makeU16(0xffff), 2); v != -32 || w != -128 || z != 0x7fe0 { t.Errorf("got %d %d 0x%x, expected -32 -128 0x7fe0", v, w, z) } if v, w, z := variableShiftOverflow8x16(-64, makeU16(0xffff), 2); v != -32 || w != -128 || z != 0x60 { t.Errorf("got %d %d 0x%x, expected -32 -128 0x60", v, w, z) } } PK ! 9� � � math_test.gonu �[��� // Copyright 2023 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 test import ( "testing" ) var Output int func BenchmarkDiv64UnsignedSmall(b *testing.B) { q := uint64(1) for i := 1; i <= b.N; i++ { q = (q + uint64(i)) / uint64(i) } Output = int(q) } func BenchmarkDiv64Small(b *testing.B) { q := int64(1) for i := 1; i <= b.N; i++ { q = (q + int64(i)) / int64(i) } Output = int(q) } func BenchmarkDiv64SmallNegDivisor(b *testing.B) { q := int64(-1) for i := 1; i <= b.N; i++ { q = (int64(i) - q) / -int64(i) } Output = int(q) } func BenchmarkDiv64SmallNegDividend(b *testing.B) { q := int64(-1) for i := 1; i <= b.N; i++ { q = -(int64(i) - q) / int64(i) } Output = int(q) } func BenchmarkDiv64SmallNegBoth(b *testing.B) { q := int64(1) for i := 1; i <= b.N; i++ { q = -(int64(i) + q) / -int64(i) } Output = int(q) } func BenchmarkDiv64Unsigned(b *testing.B) { q := uint64(1) for i := 1; i <= b.N; i++ { q = (uint64(0x7fffffffffffffff) - uint64(i) - (q & 1)) / uint64(i) } Output = int(q) } func BenchmarkDiv64(b *testing.B) { q := int64(1) for i := 1; i <= b.N; i++ { q = (int64(0x7fffffffffffffff) - int64(i) - (q & 1)) / int64(i) } Output = int(q) } func BenchmarkDiv64NegDivisor(b *testing.B) { q := int64(-1) for i := 1; i <= b.N; i++ { q = (int64(0x7fffffffffffffff) - int64(i) - (q & 1)) / -int64(i) } Output = int(q) } func BenchmarkDiv64NegDividend(b *testing.B) { q := int64(-1) for i := 1; i <= b.N; i++ { q = -(int64(0x7fffffffffffffff) - int64(i) - (q & 1)) / int64(i) } Output = int(q) } func BenchmarkDiv64NegBoth(b *testing.B) { q := int64(-1) for i := 1; i <= b.N; i++ { q = -(int64(0x7fffffffffffffff) - int64(i) - (q & 1)) / -int64(i) } Output = int(q) } func BenchmarkMod64UnsignedSmall(b *testing.B) { r := uint64(1) for i := 1; i <= b.N; i++ { r = (uint64(i) + r) % uint64(i) } Output = int(r) } func BenchmarkMod64Small(b *testing.B) { r := int64(1) for i := 1; i <= b.N; i++ { r = (int64(i) + r) % int64(i) } Output = int(r) } func BenchmarkMod64SmallNegDivisor(b *testing.B) { r := int64(-1) for i := 1; i <= b.N; i++ { r = (int64(i) - r) % -int64(i) } Output = int(r) } func BenchmarkMod64SmallNegDividend(b *testing.B) { r := int64(-1) for i := 1; i <= b.N; i++ { r = -(int64(i) - r) % int64(i) } Output = int(r) } func BenchmarkMod64SmallNegBoth(b *testing.B) { r := int64(1) for i := 1; i <= b.N; i++ { r = -(int64(i) + r) % -int64(i) } Output = int(r) } func BenchmarkMod64Unsigned(b *testing.B) { r := uint64(1) for i := 1; i <= b.N; i++ { r = (uint64(0x7fffffffffffffff) - uint64(i) - (r & 1)) % uint64(i) } Output = int(r) } func BenchmarkMod64(b *testing.B) { r := int64(1) for i := 1; i <= b.N; i++ { r = (int64(0x7fffffffffffffff) - int64(i) - (r & 1)) % int64(i) } Output = int(r) } func BenchmarkMod64NegDivisor(b *testing.B) { r := int64(-1) for i := 1; i <= b.N; i++ { r = (int64(0x7fffffffffffffff) - int64(i) - (r & 1)) % -int64(i) } Output = int(r) } func BenchmarkMod64NegDividend(b *testing.B) { r := int64(-1) for i := 1; i <= b.N; i++ { r = -(int64(0x7fffffffffffffff) - int64(i) - (r & 1)) % int64(i) } Output = int(r) } func BenchmarkMod64NegBoth(b *testing.B) { r := int64(1) for i := 1; i <= b.N; i++ { r = -(int64(0x7fffffffffffffff) - int64(i) - (r & 1)) % -int64(i) } Output = int(r) } PK ! [Y^�l l ssa_test.gonu �[��� // Copyright 2015 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 test import ( "bytes" "fmt" "go/ast" "go/parser" "go/token" "internal/testenv" "os" "path/filepath" "runtime" "strings" "testing" ) // runGenTest runs a test-generator, then runs the generated test. // Generated test can either fail in compilation or execution. // The environment variable parameter(s) is passed to the run // of the generated test. func runGenTest(t *testing.T, filename, tmpname string, ev ...string) { testenv.MustHaveGoRun(t) gotool := testenv.GoToolPath(t) var stdout, stderr bytes.Buffer cmd := testenv.Command(t, gotool, "run", filepath.Join("testdata", filename)) cmd.Stdout = &stdout cmd.Stderr = &stderr if err := cmd.Run(); err != nil { t.Fatalf("Failed: %v:\nOut: %s\nStderr: %s\n", err, &stdout, &stderr) } // Write stdout into a temporary file rungo := filepath.Join(t.TempDir(), "run.go") ok := os.WriteFile(rungo, stdout.Bytes(), 0600) if ok != nil { t.Fatalf("Failed to create temporary file " + rungo) } stdout.Reset() stderr.Reset() cmd = testenv.Command(t, gotool, "run", "-gcflags=-d=ssa/check/on", rungo) cmd.Stdout = &stdout cmd.Stderr = &stderr cmd.Env = append(cmd.Env, ev...) err := cmd.Run() if err != nil { t.Fatalf("Failed: %v:\nOut: %s\nStderr: %s\n", err, &stdout, &stderr) } if s := stderr.String(); s != "" { t.Errorf("Stderr = %s\nWant empty", s) } if s := stdout.String(); s != "" { t.Errorf("Stdout = %s\nWant empty", s) } } func TestGenFlowGraph(t *testing.T) { if testing.Short() { t.Skip("not run in short mode.") } runGenTest(t, "flowgraph_generator1.go", "ssa_fg_tmp1") } // TestCode runs all the tests in the testdata directory as subtests. // These tests are special because we want to run them with different // compiler flags set (and thus they can't just be _test.go files in // this directory). func TestCode(t *testing.T) { testenv.MustHaveGoBuild(t) gotool := testenv.GoToolPath(t) // Make a temporary directory to work in. tmpdir := t.TempDir() // Find all the test functions (and the files containing them). var srcs []string // files containing Test functions type test struct { name string // TestFoo usesFloat bool // might use float operations } var tests []test files, err := os.ReadDir("testdata") if err != nil { t.Fatalf("can't read testdata directory: %v", err) } for _, f := range files { if !strings.HasSuffix(f.Name(), "_test.go") { continue } text, err := os.ReadFile(filepath.Join("testdata", f.Name())) if err != nil { t.Fatalf("can't read testdata/%s: %v", f.Name(), err) } fset := token.NewFileSet() code, err := parser.ParseFile(fset, f.Name(), text, 0) if err != nil { t.Fatalf("can't parse testdata/%s: %v", f.Name(), err) } srcs = append(srcs, filepath.Join("testdata", f.Name())) foundTest := false for _, d := range code.Decls { fd, ok := d.(*ast.FuncDecl) if !ok { continue } if !strings.HasPrefix(fd.Name.Name, "Test") { continue } if fd.Recv != nil { continue } if fd.Type.Results != nil { continue } if len(fd.Type.Params.List) != 1 { continue } p := fd.Type.Params.List[0] if len(p.Names) != 1 { continue } s, ok := p.Type.(*ast.StarExpr) if !ok { continue } sel, ok := s.X.(*ast.SelectorExpr) if !ok { continue } base, ok := sel.X.(*ast.Ident) if !ok { continue } if base.Name != "testing" { continue } if sel.Sel.Name != "T" { continue } // Found a testing function. tests = append(tests, test{name: fd.Name.Name, usesFloat: bytes.Contains(text, []byte("float"))}) foundTest = true } if !foundTest { t.Fatalf("test file testdata/%s has no tests in it", f.Name()) } } flags := []string{""} if runtime.GOARCH == "arm" || runtime.GOARCH == "mips" || runtime.GOARCH == "mips64" || runtime.GOARCH == "386" { flags = append(flags, ",softfloat") } for _, flag := range flags { args := []string{"test", "-c", "-gcflags=-d=ssa/check/on" + flag, "-o", filepath.Join(tmpdir, "code.test")} args = append(args, srcs...) out, err := testenv.Command(t, gotool, args...).CombinedOutput() if err != nil || len(out) != 0 { t.Fatalf("Build failed: %v\n%s\n", err, out) } // Now we have a test binary. Run it with all the tests as subtests of this one. for _, test := range tests { test := test if flag == ",softfloat" && !test.usesFloat { // No point in running the soft float version if the test doesn't use floats. continue } t.Run(fmt.Sprintf("%s%s", test.name[4:], flag), func(t *testing.T) { out, err := testenv.Command(t, filepath.Join(tmpdir, "code.test"), "-test.run=^"+test.name+"$").CombinedOutput() if err != nil || string(out) != "PASS\n" { t.Errorf("Failed:\n%s\n", out) } }) } } } PK ! nNU`( ( mulconst_test.gonu �[��� // Copyright 2020 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 test import "testing" // Benchmark multiplication of an integer by various constants. // // The comment above each sub-benchmark provides an example of how the // target multiplication operation might be implemented using shift // (multiplication by a power of 2), addition and subtraction // operations. It is platform-dependent whether these transformations // are actually applied. var ( mulSinkI32 int32 mulSinkI64 int64 mulSinkU32 uint32 mulSinkU64 uint64 ) func BenchmarkMulconstI32(b *testing.B) { // 3x = 2x + x b.Run("3", func(b *testing.B) { x := int32(1) for i := 0; i < b.N; i++ { x *= 3 } mulSinkI32 = x }) // 5x = 4x + x b.Run("5", func(b *testing.B) { x := int32(1) for i := 0; i < b.N; i++ { x *= 5 } mulSinkI32 = x }) // 12x = 8x + 4x b.Run("12", func(b *testing.B) { x := int32(1) for i := 0; i < b.N; i++ { x *= 12 } mulSinkI32 = x }) // 120x = 128x - 8x b.Run("120", func(b *testing.B) { x := int32(1) for i := 0; i < b.N; i++ { x *= 120 } mulSinkI32 = x }) // -120x = 8x - 120x b.Run("-120", func(b *testing.B) { x := int32(1) for i := 0; i < b.N; i++ { x *= -120 } mulSinkI32 = x }) // 65537x = 65536x + x b.Run("65537", func(b *testing.B) { x := int32(1) for i := 0; i < b.N; i++ { x *= 65537 } mulSinkI32 = x }) // 65538x = 65536x + 2x b.Run("65538", func(b *testing.B) { x := int32(1) for i := 0; i < b.N; i++ { x *= 65538 } mulSinkI32 = x }) } func BenchmarkMulconstI64(b *testing.B) { // 3x = 2x + x b.Run("3", func(b *testing.B) { x := int64(1) for i := 0; i < b.N; i++ { x *= 3 } mulSinkI64 = x }) // 5x = 4x + x b.Run("5", func(b *testing.B) { x := int64(1) for i := 0; i < b.N; i++ { x *= 5 } mulSinkI64 = x }) // 12x = 8x + 4x b.Run("12", func(b *testing.B) { x := int64(1) for i := 0; i < b.N; i++ { x *= 12 } mulSinkI64 = x }) // 120x = 128x - 8x b.Run("120", func(b *testing.B) { x := int64(1) for i := 0; i < b.N; i++ { x *= 120 } mulSinkI64 = x }) // -120x = 8x - 120x b.Run("-120", func(b *testing.B) { x := int64(1) for i := 0; i < b.N; i++ { x *= -120 } mulSinkI64 = x }) // 65537x = 65536x + x b.Run("65537", func(b *testing.B) { x := int64(1) for i := 0; i < b.N; i++ { x *= 65537 } mulSinkI64 = x }) // 65538x = 65536x + 2x b.Run("65538", func(b *testing.B) { x := int64(1) for i := 0; i < b.N; i++ { x *= 65538 } mulSinkI64 = x }) } func BenchmarkMulconstU32(b *testing.B) { // 3x = 2x + x b.Run("3", func(b *testing.B) { x := uint32(1) for i := 0; i < b.N; i++ { x *= 3 } mulSinkU32 = x }) // 5x = 4x + x b.Run("5", func(b *testing.B) { x := uint32(1) for i := 0; i < b.N; i++ { x *= 5 } mulSinkU32 = x }) // 12x = 8x + 4x b.Run("12", func(b *testing.B) { x := uint32(1) for i := 0; i < b.N; i++ { x *= 12 } mulSinkU32 = x }) // 120x = 128x - 8x b.Run("120", func(b *testing.B) { x := uint32(1) for i := 0; i < b.N; i++ { x *= 120 } mulSinkU32 = x }) // 65537x = 65536x + x b.Run("65537", func(b *testing.B) { x := uint32(1) for i := 0; i < b.N; i++ { x *= 65537 } mulSinkU32 = x }) // 65538x = 65536x + 2x b.Run("65538", func(b *testing.B) { x := uint32(1) for i := 0; i < b.N; i++ { x *= 65538 } mulSinkU32 = x }) } func BenchmarkMulconstU64(b *testing.B) { // 3x = 2x + x b.Run("3", func(b *testing.B) { x := uint64(1) for i := 0; i < b.N; i++ { x *= 3 } mulSinkU64 = x }) // 5x = 4x + x b.Run("5", func(b *testing.B) { x := uint64(1) for i := 0; i < b.N; i++ { x *= 5 } mulSinkU64 = x }) // 12x = 8x + 4x b.Run("12", func(b *testing.B) { x := uint64(1) for i := 0; i < b.N; i++ { x *= 12 } mulSinkU64 = x }) // 120x = 128x - 8x b.Run("120", func(b *testing.B) { x := uint64(1) for i := 0; i < b.N; i++ { x *= 120 } mulSinkU64 = x }) // 65537x = 65536x + x b.Run("65537", func(b *testing.B) { x := uint64(1) for i := 0; i < b.N; i++ { x *= 65537 } mulSinkU64 = x }) // 65538x = 65536x + 2x b.Run("65538", func(b *testing.B) { x := uint64(1) for i := 0; i < b.N; i++ { x *= 65538 } mulSinkU64 = x }) } PK ! �pH> > zerorange_test.gonu �[��� // Copyright 2019 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 test import ( "testing" ) var glob = 3 var globp *int64 // Testing compilation of arch.ZeroRange of various sizes. // By storing a pointer to an int64 output param in a global, the compiler must // ensure that output param is allocated on the heap. Also, since there is a // defer, the pointer to each output param must be zeroed in the prologue (see // plive.go:epilogue()). So, we will get a block of one or more stack slots that // need to be zeroed. Hence, we are testing compilation completes successfully when // zerorange calls of various sizes (8-136 bytes) are generated. We are not // testing runtime correctness (which is hard to do for the current uses of // ZeroRange). func TestZeroRange(t *testing.T) { testZeroRange8(t) testZeroRange16(t) testZeroRange32(t) testZeroRange64(t) testZeroRange136(t) } func testZeroRange8(t *testing.T) (r int64) { defer func() { glob = 4 }() globp = &r return } func testZeroRange16(t *testing.T) (r, s int64) { defer func() { glob = 4 }() globp = &r globp = &s return } func testZeroRange32(t *testing.T) (r, s, t2, u int64) { defer func() { glob = 4 }() globp = &r globp = &s globp = &t2 globp = &u return } func testZeroRange64(t *testing.T) (r, s, t2, u, v, w, x, y int64) { defer func() { glob = 4 }() globp = &r globp = &s globp = &t2 globp = &u globp = &v globp = &w globp = &x globp = &y return } func testZeroRange136(t *testing.T) (r, s, t2, u, v, w, x, y, r1, s1, t1, u1, v1, w1, x1, y1, z1 int64) { defer func() { glob = 4 }() globp = &r globp = &s globp = &t2 globp = &u globp = &v globp = &w globp = &x globp = &y globp = &r1 globp = &s1 globp = &t1 globp = &u1 globp = &v1 globp = &w1 globp = &x1 globp = &y1 globp = &z1 return } type S struct { x [2]uint64 p *uint64 y [2]uint64 q uint64 } type M struct { x [8]uint64 p *uint64 y [8]uint64 q uint64 } type L struct { x [4096]uint64 p *uint64 y [4096]uint64 q uint64 } //go:noinline func triggerZerorangeLarge(f, g, h uint64) (rv0 uint64) { ll := L{p: &f} da := f rv0 = f + g + h defer func(dl L, i uint64) { rv0 += dl.q + i }(ll, da) return rv0 } //go:noinline func triggerZerorangeMedium(f, g, h uint64) (rv0 uint64) { ll := M{p: &f} rv0 = f + g + h defer func(dm M, i uint64) { rv0 += dm.q + i }(ll, f) return rv0 } //go:noinline func triggerZerorangeSmall(f, g, h uint64) (rv0 uint64) { ll := S{p: &f} rv0 = f + g + h defer func(ds S, i uint64) { rv0 += ds.q + i }(ll, f) return rv0 } // This test was created as a follow up to issue #45372, to help // improve coverage of the compiler's arch-specific "zerorange" // function, which is invoked to zero out ambiguously live portions of // the stack frame in certain specific circumstances. // // In the current compiler implementation, for zerorange to be // invoked, we need to have an ambiguously live variable that needs // zeroing. One way to trigger this is to have a function with an // open-coded defer, where the opendefer function has an argument that // contains a pointer (this is what's used below). // // At the moment this test doesn't do any specific checking for // code sequence, or verification that things were properly set to zero, // this seems as though it would be too tricky and would result // in a "brittle" test. // // The small/medium/large scenarios below are inspired by the amd64 // implementation of zerorange, which generates different code // depending on the size of the thing that needs to be zeroed out // (I've verified at the time of the writing of this test that it // exercises the various cases). func TestZerorange45372(t *testing.T) { if r := triggerZerorangeLarge(101, 303, 505); r != 1010 { t.Errorf("large: wanted %d got %d", 1010, r) } if r := triggerZerorangeMedium(101, 303, 505); r != 1010 { t.Errorf("medium: wanted %d got %d", 1010, r) } if r := triggerZerorangeSmall(101, 303, 505); r != 1010 { t.Errorf("small: wanted %d got %d", 1010, r) } } PK ! �)�` ` global_test.gonu �[��� // Copyright 2015 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 test import ( "bytes" "internal/testenv" "os" "path/filepath" "strings" "testing" ) // Make sure "hello world" does not link in all the // fmt.scanf routines. See issue 6853. func TestScanfRemoval(t *testing.T) { testenv.MustHaveGoBuild(t) t.Parallel() // Make a directory to work in. dir := t.TempDir() // Create source. src := filepath.Join(dir, "test.go") f, err := os.Create(src) if err != nil { t.Fatalf("could not create source file: %v", err) } f.Write([]byte(` package main import "fmt" func main() { fmt.Println("hello world") } `)) f.Close() // Name of destination. dst := filepath.Join(dir, "test") // Compile source. cmd := testenv.Command(t, testenv.GoToolPath(t), "build", "-o", dst, src) out, err := cmd.CombinedOutput() if err != nil { t.Fatalf("could not build target: %v\n%s", err, out) } // Check destination to see if scanf code was included. cmd = testenv.Command(t, testenv.GoToolPath(t), "tool", "nm", dst) out, err = cmd.CombinedOutput() if err != nil { t.Fatalf("could not read target: %v", err) } if bytes.Contains(out, []byte("scanInt")) { t.Fatalf("scanf code not removed from helloworld") } } // Make sure -S prints assembly code. See issue 14515. func TestDashS(t *testing.T) { testenv.MustHaveGoBuild(t) t.Parallel() // Make a directory to work in. dir := t.TempDir() // Create source. src := filepath.Join(dir, "test.go") f, err := os.Create(src) if err != nil { t.Fatalf("could not create source file: %v", err) } f.Write([]byte(` package main import "fmt" func main() { fmt.Println("hello world") } `)) f.Close() // Compile source. cmd := testenv.Command(t, testenv.GoToolPath(t), "build", "-gcflags", "-S", "-o", filepath.Join(dir, "test"), src) out, err := cmd.CombinedOutput() if err != nil { t.Fatalf("could not build target: %v\n%s", err, out) } patterns := []string{ // It is hard to look for actual instructions in an // arch-independent way. So we'll just look for // pseudo-ops that are arch-independent. "\tTEXT\t", "\tFUNCDATA\t", "\tPCDATA\t", } outstr := string(out) for _, p := range patterns { if !strings.Contains(outstr, p) { println(outstr) panic("can't find pattern " + p) } } } PK ! =�̥� � switch_test.gonu �[��� // Copyright 2021 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 test import ( "math/bits" "testing" ) func BenchmarkSwitch8Predictable(b *testing.B) { benchmarkSwitch8(b, true) } func BenchmarkSwitch8Unpredictable(b *testing.B) { benchmarkSwitch8(b, false) } func benchmarkSwitch8(b *testing.B, predictable bool) { n := 0 rng := newRNG() for i := 0; i < b.N; i++ { rng = rng.next(predictable) switch rng.value() & 7 { case 0: n += 1 case 1: n += 2 case 2: n += 3 case 3: n += 4 case 4: n += 5 case 5: n += 6 case 6: n += 7 case 7: n += 8 } } sink = n } func BenchmarkSwitch32Predictable(b *testing.B) { benchmarkSwitch32(b, true) } func BenchmarkSwitch32Unpredictable(b *testing.B) { benchmarkSwitch32(b, false) } func benchmarkSwitch32(b *testing.B, predictable bool) { n := 0 rng := newRNG() for i := 0; i < b.N; i++ { rng = rng.next(predictable) switch rng.value() & 31 { case 0, 1, 2: n += 1 case 4, 5, 6: n += 2 case 8, 9, 10: n += 3 case 12, 13, 14: n += 4 case 16, 17, 18: n += 5 case 20, 21, 22: n += 6 case 24, 25, 26: n += 7 case 28, 29, 30: n += 8 default: n += 9 } } sink = n } func BenchmarkSwitchStringPredictable(b *testing.B) { benchmarkSwitchString(b, true) } func BenchmarkSwitchStringUnpredictable(b *testing.B) { benchmarkSwitchString(b, false) } func benchmarkSwitchString(b *testing.B, predictable bool) { a := []string{ "foo", "foo1", "foo22", "foo333", "foo4444", "foo55555", "foo666666", "foo7777777", } n := 0 rng := newRNG() for i := 0; i < b.N; i++ { rng = rng.next(predictable) switch a[rng.value()&7] { case "foo": n += 1 case "foo1": n += 2 case "foo22": n += 3 case "foo333": n += 4 case "foo4444": n += 5 case "foo55555": n += 6 case "foo666666": n += 7 case "foo7777777": n += 8 } } sink = n } func BenchmarkSwitchTypePredictable(b *testing.B) { benchmarkSwitchType(b, true) } func BenchmarkSwitchTypeUnpredictable(b *testing.B) { benchmarkSwitchType(b, false) } func benchmarkSwitchType(b *testing.B, predictable bool) { a := []any{ int8(1), int16(2), int32(3), int64(4), uint8(5), uint16(6), uint32(7), uint64(8), } n := 0 rng := newRNG() for i := 0; i < b.N; i++ { rng = rng.next(predictable) switch a[rng.value()&7].(type) { case int8: n += 1 case int16: n += 2 case int32: n += 3 case int64: n += 4 case uint8: n += 5 case uint16: n += 6 case uint32: n += 7 case uint64: n += 8 } } sink = n } func BenchmarkSwitchInterfaceTypePredictable(b *testing.B) { benchmarkSwitchInterfaceType(b, true) } func BenchmarkSwitchInterfaceTypeUnpredictable(b *testing.B) { benchmarkSwitchInterfaceType(b, false) } type SI0 interface { si0() } type ST0 struct { } func (ST0) si0() { } type SI1 interface { si1() } type ST1 struct { } func (ST1) si1() { } type SI2 interface { si2() } type ST2 struct { } func (ST2) si2() { } type SI3 interface { si3() } type ST3 struct { } func (ST3) si3() { } type SI4 interface { si4() } type ST4 struct { } func (ST4) si4() { } type SI5 interface { si5() } type ST5 struct { } func (ST5) si5() { } type SI6 interface { si6() } type ST6 struct { } func (ST6) si6() { } type SI7 interface { si7() } type ST7 struct { } func (ST7) si7() { } func benchmarkSwitchInterfaceType(b *testing.B, predictable bool) { a := []any{ ST0{}, ST1{}, ST2{}, ST3{}, ST4{}, ST5{}, ST6{}, ST7{}, } n := 0 rng := newRNG() for i := 0; i < b.N; i++ { rng = rng.next(predictable) switch a[rng.value()&7].(type) { case SI0: n += 1 case SI1: n += 2 case SI2: n += 3 case SI3: n += 4 case SI4: n += 5 case SI5: n += 6 case SI6: n += 7 case SI7: n += 8 } } sink = n } // A simple random number generator used to make switches conditionally predictable. type rng uint64 func newRNG() rng { return 1 } func (r rng) next(predictable bool) rng { if predictable { return r + 1 } return rng(bits.RotateLeft64(uint64(r), 13) * 0x3c374d) } func (r rng) value() uint64 { return uint64(r) } PK ! O���k k issue57434_test.gonu �[��� // Copyright 2023 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 test import ( "testing" ) var output int type Object struct { Val int } func (o *Object) Initialize() *Object { o.Val = 5 return o } func (o *Object) Update() *Object { o.Val = o.Val + 1 return o } func TestAutotmpLoopDepth(t *testing.T) { f := func() { for i := 0; i < 10; i++ { var obj Object obj.Initialize().Update() output = obj.Val } } if n := testing.AllocsPerRun(10, f); n > 0 { t.Error("obj moved to heap") } } PK ! �� issue53888_test.gonu �[��� // Copyright 2022 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. //go:build !race package test import ( "internal/testenv" "testing" ) func TestAppendOfMake(t *testing.T) { testenv.SkipIfOptimizationOff(t) for n := 32; n < 33; n++ { // avoid stack allocation of make() b := make([]byte, n) f := func() { b = append(b[:0], make([]byte, n)...) } if n := testing.AllocsPerRun(10, f); n > 0 { t.Errorf("got %f allocs, want 0", n) } type S []byte s := make(S, n) g := func() { s = append(s[:0], make(S, n)...) } if n := testing.AllocsPerRun(10, g); n > 0 { t.Errorf("got %f allocs, want 0", n) } h := func() { s = append(s[:0], make([]byte, n)...) } if n := testing.AllocsPerRun(10, h); n > 0 { t.Errorf("got %f allocs, want 0", n) } i := func() { b = append(b[:0], make(S, n)...) } if n := testing.AllocsPerRun(10, i); n > 0 { t.Errorf("got %f allocs, want 0", n) } } } PK ! �"���8 �8 abiutils_test.gonu �[��� // Copyright 2020 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 test import ( "bufio" "cmd/compile/internal/abi" "cmd/compile/internal/base" "cmd/compile/internal/ssagen" "cmd/compile/internal/typecheck" "cmd/compile/internal/types" "cmd/internal/obj" "cmd/internal/obj/x86" "cmd/internal/src" "fmt" "os" "testing" ) // AMD64 registers available: // - integer: RAX, RBX, RCX, RDI, RSI, R8, R9, r10, R11 // - floating point: X0 - X14 var configAMD64 = abi.NewABIConfig(9, 15, 0, 1) func TestMain(m *testing.M) { ssagen.Arch.LinkArch = &x86.Linkamd64 ssagen.Arch.REGSP = x86.REGSP ssagen.Arch.MAXWIDTH = 1 << 50 types.MaxWidth = ssagen.Arch.MAXWIDTH base.Ctxt = obj.Linknew(ssagen.Arch.LinkArch) base.Ctxt.DiagFunc = base.Errorf base.Ctxt.DiagFlush = base.FlushErrors base.Ctxt.Bso = bufio.NewWriter(os.Stdout) types.LocalPkg = types.NewPkg("p", "local") types.LocalPkg.Prefix = "p" types.PtrSize = ssagen.Arch.LinkArch.PtrSize types.RegSize = ssagen.Arch.LinkArch.RegSize typecheck.InitUniverse() os.Exit(m.Run()) } func TestABIUtilsBasic1(t *testing.T) { // func(x int32) int32 i32 := types.Types[types.TINT32] ft := mkFuncType(nil, []*types.Type{i32}, []*types.Type{i32}) // expected results exp := makeExpectedDump(` IN 0: R{ I0 } spilloffset: 0 typ: int32 OUT 0: R{ I0 } spilloffset: -1 typ: int32 offsetToSpillArea: 0 spillAreaSize: 8 `) abitest(t, ft, exp) } func TestABIUtilsBasic2(t *testing.T) { // func(p1 int8, p2 int16, p3 int32, p4 int64, // p5 float32, p6 float32, p7 float64, p8 float64, // p9 int8, p10 int16, p11 int32, p12 int64, // p13 float32, p14 float32, p15 float64, p16 float64, // p17 complex128, p18 complex128, p19 complex12, p20 complex128, // p21 complex64, p22 int8, p23 in16, p24 int32, p25 int64, // p26 int8, p27 in16, p28 int32, p29 int64) // (r1 int32, r2 float64, r3 float64) { i8 := types.Types[types.TINT8] i16 := types.Types[types.TINT16] i32 := types.Types[types.TINT32] i64 := types.Types[types.TINT64] f32 := types.Types[types.TFLOAT32] f64 := types.Types[types.TFLOAT64] c64 := types.Types[types.TCOMPLEX64] c128 := types.Types[types.TCOMPLEX128] ft := mkFuncType(nil, []*types.Type{ i8, i16, i32, i64, f32, f32, f64, f64, i8, i16, i32, i64, f32, f32, f64, f64, c128, c128, c128, c128, c64, i8, i16, i32, i64, i8, i16, i32, i64}, []*types.Type{i32, f64, f64}) exp := makeExpectedDump(` IN 0: R{ I0 } spilloffset: 0 typ: int8 IN 1: R{ I1 } spilloffset: 2 typ: int16 IN 2: R{ I2 } spilloffset: 4 typ: int32 IN 3: R{ I3 } spilloffset: 8 typ: int64 IN 4: R{ F0 } spilloffset: 16 typ: float32 IN 5: R{ F1 } spilloffset: 20 typ: float32 IN 6: R{ F2 } spilloffset: 24 typ: float64 IN 7: R{ F3 } spilloffset: 32 typ: float64 IN 8: R{ I4 } spilloffset: 40 typ: int8 IN 9: R{ I5 } spilloffset: 42 typ: int16 IN 10: R{ I6 } spilloffset: 44 typ: int32 IN 11: R{ I7 } spilloffset: 48 typ: int64 IN 12: R{ F4 } spilloffset: 56 typ: float32 IN 13: R{ F5 } spilloffset: 60 typ: float32 IN 14: R{ F6 } spilloffset: 64 typ: float64 IN 15: R{ F7 } spilloffset: 72 typ: float64 IN 16: R{ F8 F9 } spilloffset: 80 typ: complex128 IN 17: R{ F10 F11 } spilloffset: 96 typ: complex128 IN 18: R{ F12 F13 } spilloffset: 112 typ: complex128 IN 19: R{ } offset: 0 typ: complex128 IN 20: R{ } offset: 16 typ: complex64 IN 21: R{ I8 } spilloffset: 128 typ: int8 IN 22: R{ } offset: 24 typ: int16 IN 23: R{ } offset: 28 typ: int32 IN 24: R{ } offset: 32 typ: int64 IN 25: R{ } offset: 40 typ: int8 IN 26: R{ } offset: 42 typ: int16 IN 27: R{ } offset: 44 typ: int32 IN 28: R{ } offset: 48 typ: int64 OUT 0: R{ I0 } spilloffset: -1 typ: int32 OUT 1: R{ F0 } spilloffset: -1 typ: float64 OUT 2: R{ F1 } spilloffset: -1 typ: float64 offsetToSpillArea: 56 spillAreaSize: 136 `) abitest(t, ft, exp) } func TestABIUtilsArrays(t *testing.T) { // func(p1 [1]int32, p2 [0]int32, p3 [1][1]int32, p4 [2]int32) // (r1 [2]int32, r2 [1]int32, r3 [0]int32, r4 [1][1]int32) { i32 := types.Types[types.TINT32] ae := types.NewArray(i32, 0) a1 := types.NewArray(i32, 1) a2 := types.NewArray(i32, 2) aa1 := types.NewArray(a1, 1) ft := mkFuncType(nil, []*types.Type{a1, ae, aa1, a2}, []*types.Type{a2, a1, ae, aa1}) exp := makeExpectedDump(` IN 0: R{ I0 } spilloffset: 0 typ: [1]int32 IN 1: R{ } offset: 0 typ: [0]int32 IN 2: R{ I1 } spilloffset: 4 typ: [1][1]int32 IN 3: R{ } offset: 0 typ: [2]int32 OUT 0: R{ } offset: 8 typ: [2]int32 OUT 1: R{ I0 } spilloffset: -1 typ: [1]int32 OUT 2: R{ } offset: 16 typ: [0]int32 OUT 3: R{ I1 } spilloffset: -1 typ: [1][1]int32 offsetToSpillArea: 16 spillAreaSize: 8 `) abitest(t, ft, exp) } func TestABIUtilsStruct1(t *testing.T) { // type s struct { f1 int8; f2 int8; f3 struct {}; f4 int8; f5 int16) } // func(p1 int6, p2 s, p3 int64) // (r1 s, r2 int8, r3 int32) { i8 := types.Types[types.TINT8] i16 := types.Types[types.TINT16] i32 := types.Types[types.TINT32] i64 := types.Types[types.TINT64] s := mkstruct(i8, i8, mkstruct(), i8, i16) ft := mkFuncType(nil, []*types.Type{i8, s, i64}, []*types.Type{s, i8, i32}) exp := makeExpectedDump(` IN 0: R{ I0 } spilloffset: 0 typ: int8 IN 1: R{ I1 I2 I3 I4 } spilloffset: 2 typ: struct { int8; int8; struct {}; int8; int16 } IN 2: R{ I5 } spilloffset: 8 typ: int64 OUT 0: R{ I0 I1 I2 I3 } spilloffset: -1 typ: struct { int8; int8; struct {}; int8; int16 } OUT 1: R{ I4 } spilloffset: -1 typ: int8 OUT 2: R{ I5 } spilloffset: -1 typ: int32 offsetToSpillArea: 0 spillAreaSize: 16 `) abitest(t, ft, exp) } func TestABIUtilsStruct2(t *testing.T) { // type s struct { f1 int64; f2 struct { } } // type fs struct { f1 float64; f2 s; f3 struct { } } // func(p1 s, p2 s, p3 fs) // (r1 fs, r2 fs) f64 := types.Types[types.TFLOAT64] i64 := types.Types[types.TINT64] s := mkstruct(i64, mkstruct()) fs := mkstruct(f64, s, mkstruct()) ft := mkFuncType(nil, []*types.Type{s, s, fs}, []*types.Type{fs, fs}) exp := makeExpectedDump(` IN 0: R{ I0 } spilloffset: 0 typ: struct { int64; struct {} } IN 1: R{ I1 } spilloffset: 16 typ: struct { int64; struct {} } IN 2: R{ F0 I2 } spilloffset: 32 typ: struct { float64; struct { int64; struct {} }; struct {} } OUT 0: R{ F0 I0 } spilloffset: -1 typ: struct { float64; struct { int64; struct {} }; struct {} } OUT 1: R{ F1 I1 } spilloffset: -1 typ: struct { float64; struct { int64; struct {} }; struct {} } offsetToSpillArea: 0 spillAreaSize: 64 `) abitest(t, ft, exp) } // TestABIUtilsEmptyFieldAtEndOfStruct is testing to make sure // the abi code is doing the right thing for struct types that have // a trailing zero-sized field (where the we need to add padding). func TestABIUtilsEmptyFieldAtEndOfStruct(t *testing.T) { // type s struct { f1 [2]int64; f2 struct { } } // type s2 struct { f1 [3]int16; f2 struct { } } // type fs struct { f1 float64; f s; f3 struct { } } // func(p1 s, p2 s, p3 fs) (r1 fs, r2 fs) f64 := types.Types[types.TFLOAT64] i64 := types.Types[types.TINT64] i16 := types.Types[types.TINT16] tb := types.Types[types.TBOOL] ab2 := types.NewArray(tb, 2) a2 := types.NewArray(i64, 2) a3 := types.NewArray(i16, 3) empty := mkstruct() s := mkstruct(a2, empty) s2 := mkstruct(a3, empty) fs := mkstruct(f64, s, empty) ft := mkFuncType(nil, []*types.Type{s, ab2, s2, fs, fs}, []*types.Type{fs, ab2, fs}) exp := makeExpectedDump(` IN 0: R{ } offset: 0 typ: struct { [2]int64; struct {} } IN 1: R{ } offset: 24 typ: [2]bool IN 2: R{ } offset: 26 typ: struct { [3]int16; struct {} } IN 3: R{ } offset: 40 typ: struct { float64; struct { [2]int64; struct {} }; struct {} } IN 4: R{ } offset: 80 typ: struct { float64; struct { [2]int64; struct {} }; struct {} } OUT 0: R{ } offset: 120 typ: struct { float64; struct { [2]int64; struct {} }; struct {} } OUT 1: R{ } offset: 160 typ: [2]bool OUT 2: R{ } offset: 168 typ: struct { float64; struct { [2]int64; struct {} }; struct {} } offsetToSpillArea: 208 spillAreaSize: 0 `) abitest(t, ft, exp) // Test that NumParamRegs doesn't assign registers to trailing padding. typ := mkstruct(i64, i64, mkstruct()) have := configAMD64.NumParamRegs(typ) if have != 2 { t.Errorf("NumParams(%v): have %v, want %v", typ, have, 2) } } func TestABIUtilsSliceString(t *testing.T) { // func(p1 []int32, p2 int8, p3 []int32, p4 int8, p5 string, // p6 int64, p6 []intr32) (r1 string, r2 int64, r3 string, r4 []int32) i32 := types.Types[types.TINT32] sli32 := types.NewSlice(i32) str := types.Types[types.TSTRING] i8 := types.Types[types.TINT8] i64 := types.Types[types.TINT64] ft := mkFuncType(nil, []*types.Type{sli32, i8, sli32, i8, str, i8, i64, sli32}, []*types.Type{str, i64, str, sli32}) exp := makeExpectedDump(` IN 0: R{ I0 I1 I2 } spilloffset: 0 typ: []int32 IN 1: R{ I3 } spilloffset: 24 typ: int8 IN 2: R{ I4 I5 I6 } spilloffset: 32 typ: []int32 IN 3: R{ I7 } spilloffset: 56 typ: int8 IN 4: R{ } offset: 0 typ: string IN 5: R{ I8 } spilloffset: 57 typ: int8 IN 6: R{ } offset: 16 typ: int64 IN 7: R{ } offset: 24 typ: []int32 OUT 0: R{ I0 I1 } spilloffset: -1 typ: string OUT 1: R{ I2 } spilloffset: -1 typ: int64 OUT 2: R{ I3 I4 } spilloffset: -1 typ: string OUT 3: R{ I5 I6 I7 } spilloffset: -1 typ: []int32 offsetToSpillArea: 48 spillAreaSize: 64 `) abitest(t, ft, exp) } func TestABIUtilsMethod(t *testing.T) { // type s1 struct { f1 int16; f2 int16; f3 int16 } // func(p1 *s1, p2 [7]*s1, p3 float64, p4 int16, p5 int16, p6 int16) // (r1 [7]*s1, r2 float64, r3 int64) i16 := types.Types[types.TINT16] i64 := types.Types[types.TINT64] f64 := types.Types[types.TFLOAT64] s1 := mkstruct(i16, i16, i16) ps1 := types.NewPtr(s1) a7 := types.NewArray(ps1, 7) ft := mkFuncType(s1, []*types.Type{ps1, a7, f64, i16, i16, i16}, []*types.Type{a7, f64, i64}) exp := makeExpectedDump(` IN 0: R{ I0 I1 I2 } spilloffset: 0 typ: struct { int16; int16; int16 } IN 1: R{ I3 } spilloffset: 8 typ: *struct { int16; int16; int16 } IN 2: R{ } offset: 0 typ: [7]*struct { int16; int16; int16 } IN 3: R{ F0 } spilloffset: 16 typ: float64 IN 4: R{ I4 } spilloffset: 24 typ: int16 IN 5: R{ I5 } spilloffset: 26 typ: int16 IN 6: R{ I6 } spilloffset: 28 typ: int16 OUT 0: R{ } offset: 56 typ: [7]*struct { int16; int16; int16 } OUT 1: R{ F0 } spilloffset: -1 typ: float64 OUT 2: R{ I0 } spilloffset: -1 typ: int64 offsetToSpillArea: 112 spillAreaSize: 32 `) abitest(t, ft, exp) } func TestABIUtilsInterfaces(t *testing.T) { // type s1 { f1 int16; f2 int16; f3 bool) // type nei interface { ...() string } // func(p1 s1, p2 interface{}, p3 interface{}, p4 nei, // p5 *interface{}, p6 nei, p7 int64) // (r1 interface{}, r2 nei, r3 bool) ei := types.Types[types.TINTER] // interface{} pei := types.NewPtr(ei) // *interface{} fldt := mkFuncType(types.FakeRecvType(), []*types.Type{}, []*types.Type{types.Types[types.TSTRING]}) field := types.NewField(src.NoXPos, typecheck.Lookup("F"), fldt) nei := types.NewInterface([]*types.Field{field}) i16 := types.Types[types.TINT16] tb := types.Types[types.TBOOL] s1 := mkstruct(i16, i16, tb) ft := mkFuncType(nil, []*types.Type{s1, ei, ei, nei, pei, nei, i16}, []*types.Type{ei, nei, pei}) exp := makeExpectedDump(` IN 0: R{ I0 I1 I2 } spilloffset: 0 typ: struct { int16; int16; bool } IN 1: R{ I3 I4 } spilloffset: 8 typ: interface {} IN 2: R{ I5 I6 } spilloffset: 24 typ: interface {} IN 3: R{ I7 I8 } spilloffset: 40 typ: interface { F() string } IN 4: R{ } offset: 0 typ: *interface {} IN 5: R{ } offset: 8 typ: interface { F() string } IN 6: R{ } offset: 24 typ: int16 OUT 0: R{ I0 I1 } spilloffset: -1 typ: interface {} OUT 1: R{ I2 I3 } spilloffset: -1 typ: interface { F() string } OUT 2: R{ I4 } spilloffset: -1 typ: *interface {} offsetToSpillArea: 32 spillAreaSize: 56 `) abitest(t, ft, exp) } func TestABINumParamRegs(t *testing.T) { i8 := types.Types[types.TINT8] i16 := types.Types[types.TINT16] i32 := types.Types[types.TINT32] i64 := types.Types[types.TINT64] f32 := types.Types[types.TFLOAT32] f64 := types.Types[types.TFLOAT64] c64 := types.Types[types.TCOMPLEX64] c128 := types.Types[types.TCOMPLEX128] s := mkstruct(i8, i8, mkstruct(), i8, i16) a := mkstruct(s, s, s) nrtest(t, i8, 1) nrtest(t, i16, 1) nrtest(t, i32, 1) nrtest(t, i64, 1) nrtest(t, f32, 1) nrtest(t, f64, 1) nrtest(t, c64, 2) nrtest(t, c128, 2) nrtest(t, s, 4) nrtest(t, a, 12) } func TestABIUtilsComputePadding(t *testing.T) { // type s1 { f1 int8; f2 int16; f3 struct{}; f4 int32; f5 int64 } i8 := types.Types[types.TINT8] i16 := types.Types[types.TINT16] i32 := types.Types[types.TINT32] i64 := types.Types[types.TINT64] emptys := mkstruct() s1 := mkstruct(i8, i16, emptys, i32, i64) // func (p1 int32, p2 s1, p3 emptys, p4 [1]int32) a1 := types.NewArray(i32, 1) ft := mkFuncType(nil, []*types.Type{i32, s1, emptys, a1}, nil) // Run abitest() just to document what we're expected to see. exp := makeExpectedDump(` IN 0: R{ I0 } spilloffset: 0 typ: int32 IN 1: R{ I1 I2 I3 I4 } spilloffset: 8 typ: struct { int8; int16; struct {}; int32; int64 } IN 2: R{ } offset: 0 typ: struct {} IN 3: R{ I5 } spilloffset: 24 typ: [1]int32 offsetToSpillArea: 0 spillAreaSize: 32 `) abitest(t, ft, exp) // Analyze with full set of registers, then call ComputePadding // on the second param, verifying the results. regRes := configAMD64.ABIAnalyze(ft, false) padding := make([]uint64, 32) parm := regRes.InParams()[1] padding = parm.ComputePadding(padding) want := "[1 1 1 0]" got := fmt.Sprintf("%+v", padding) if got != want { t.Errorf("padding mismatch: wanted %q got %q\n", got, want) } } PK ! ���, �, logic_test.gonu �[��� // 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. package test import "testing" // Tests to make sure logic simplification rules are correct. func TestLogic64(t *testing.T) { // test values to determine function equality values := [...]int64{-1 << 63, 1<<63 - 1, -4, -3, -2, -1, 0, 1, 2, 3, 4} // golden functions we use repeatedly zero := func(x int64) int64 { return 0 } id := func(x int64) int64 { return x } or := func(x, y int64) int64 { return x | y } and := func(x, y int64) int64 { return x & y } y := func(x, y int64) int64 { return y } for _, test := range [...]struct { name string f func(int64) int64 golden func(int64) int64 }{ {"x|x", func(x int64) int64 { return x | x }, id}, {"x|0", func(x int64) int64 { return x | 0 }, id}, {"x|-1", func(x int64) int64 { return x | -1 }, func(x int64) int64 { return -1 }}, {"x&x", func(x int64) int64 { return x & x }, id}, {"x&0", func(x int64) int64 { return x & 0 }, zero}, {"x&-1", func(x int64) int64 { return x & -1 }, id}, {"x^x", func(x int64) int64 { return x ^ x }, zero}, {"x^0", func(x int64) int64 { return x ^ 0 }, id}, {"x^-1", func(x int64) int64 { return x ^ -1 }, func(x int64) int64 { return ^x }}, {"x+0", func(x int64) int64 { return x + 0 }, id}, {"x-x", func(x int64) int64 { return x - x }, zero}, {"x*0", func(x int64) int64 { return x * 0 }, zero}, {"^^x", func(x int64) int64 { return ^^x }, id}, } { for _, v := range values { got := test.f(v) want := test.golden(v) if want != got { t.Errorf("[%s](%d)=%d, want %d", test.name, v, got, want) } } } for _, test := range [...]struct { name string f func(int64, int64) int64 golden func(int64, int64) int64 }{ {"x|(x|y)", func(x, y int64) int64 { return x | (x | y) }, or}, {"x|(y|x)", func(x, y int64) int64 { return x | (y | x) }, or}, {"(x|y)|x", func(x, y int64) int64 { return (x | y) | x }, or}, {"(y|x)|x", func(x, y int64) int64 { return (y | x) | x }, or}, {"x&(x&y)", func(x, y int64) int64 { return x & (x & y) }, and}, {"x&(y&x)", func(x, y int64) int64 { return x & (y & x) }, and}, {"(x&y)&x", func(x, y int64) int64 { return (x & y) & x }, and}, {"(y&x)&x", func(x, y int64) int64 { return (y & x) & x }, and}, {"x^(x^y)", func(x, y int64) int64 { return x ^ (x ^ y) }, y}, {"x^(y^x)", func(x, y int64) int64 { return x ^ (y ^ x) }, y}, {"(x^y)^x", func(x, y int64) int64 { return (x ^ y) ^ x }, y}, {"(y^x)^x", func(x, y int64) int64 { return (y ^ x) ^ x }, y}, {"-(y-x)", func(x, y int64) int64 { return -(y - x) }, func(x, y int64) int64 { return x - y }}, {"(x+y)-x", func(x, y int64) int64 { return (x + y) - x }, y}, {"(y+x)-x", func(x, y int64) int64 { return (y + x) - x }, y}, } { for _, v := range values { for _, w := range values { got := test.f(v, w) want := test.golden(v, w) if want != got { t.Errorf("[%s](%d,%d)=%d, want %d", test.name, v, w, got, want) } } } } } func TestLogic32(t *testing.T) { // test values to determine function equality values := [...]int32{-1 << 31, 1<<31 - 1, -4, -3, -2, -1, 0, 1, 2, 3, 4} // golden functions we use repeatedly zero := func(x int32) int32 { return 0 } id := func(x int32) int32 { return x } or := func(x, y int32) int32 { return x | y } and := func(x, y int32) int32 { return x & y } y := func(x, y int32) int32 { return y } for _, test := range [...]struct { name string f func(int32) int32 golden func(int32) int32 }{ {"x|x", func(x int32) int32 { return x | x }, id}, {"x|0", func(x int32) int32 { return x | 0 }, id}, {"x|-1", func(x int32) int32 { return x | -1 }, func(x int32) int32 { return -1 }}, {"x&x", func(x int32) int32 { return x & x }, id}, {"x&0", func(x int32) int32 { return x & 0 }, zero}, {"x&-1", func(x int32) int32 { return x & -1 }, id}, {"x^x", func(x int32) int32 { return x ^ x }, zero}, {"x^0", func(x int32) int32 { return x ^ 0 }, id}, {"x^-1", func(x int32) int32 { return x ^ -1 }, func(x int32) int32 { return ^x }}, {"x+0", func(x int32) int32 { return x + 0 }, id}, {"x-x", func(x int32) int32 { return x - x }, zero}, {"x*0", func(x int32) int32 { return x * 0 }, zero}, {"^^x", func(x int32) int32 { return ^^x }, id}, } { for _, v := range values { got := test.f(v) want := test.golden(v) if want != got { t.Errorf("[%s](%d)=%d, want %d", test.name, v, got, want) } } } for _, test := range [...]struct { name string f func(int32, int32) int32 golden func(int32, int32) int32 }{ {"x|(x|y)", func(x, y int32) int32 { return x | (x | y) }, or}, {"x|(y|x)", func(x, y int32) int32 { return x | (y | x) }, or}, {"(x|y)|x", func(x, y int32) int32 { return (x | y) | x }, or}, {"(y|x)|x", func(x, y int32) int32 { return (y | x) | x }, or}, {"x&(x&y)", func(x, y int32) int32 { return x & (x & y) }, and}, {"x&(y&x)", func(x, y int32) int32 { return x & (y & x) }, and}, {"(x&y)&x", func(x, y int32) int32 { return (x & y) & x }, and}, {"(y&x)&x", func(x, y int32) int32 { return (y & x) & x }, and}, {"x^(x^y)", func(x, y int32) int32 { return x ^ (x ^ y) }, y}, {"x^(y^x)", func(x, y int32) int32 { return x ^ (y ^ x) }, y}, {"(x^y)^x", func(x, y int32) int32 { return (x ^ y) ^ x }, y}, {"(y^x)^x", func(x, y int32) int32 { return (y ^ x) ^ x }, y}, {"-(y-x)", func(x, y int32) int32 { return -(y - x) }, func(x, y int32) int32 { return x - y }}, {"(x+y)-x", func(x, y int32) int32 { return (x + y) - x }, y}, {"(y+x)-x", func(x, y int32) int32 { return (y + x) - x }, y}, } { for _, v := range values { for _, w := range values { got := test.f(v, w) want := test.golden(v, w) if want != got { t.Errorf("[%s](%d,%d)=%d, want %d", test.name, v, w, got, want) } } } } } func TestLogic16(t *testing.T) { // test values to determine function equality values := [...]int16{-1 << 15, 1<<15 - 1, -4, -3, -2, -1, 0, 1, 2, 3, 4} // golden functions we use repeatedly zero := func(x int16) int16 { return 0 } id := func(x int16) int16 { return x } or := func(x, y int16) int16 { return x | y } and := func(x, y int16) int16 { return x & y } y := func(x, y int16) int16 { return y } for _, test := range [...]struct { name string f func(int16) int16 golden func(int16) int16 }{ {"x|x", func(x int16) int16 { return x | x }, id}, {"x|0", func(x int16) int16 { return x | 0 }, id}, {"x|-1", func(x int16) int16 { return x | -1 }, func(x int16) int16 { return -1 }}, {"x&x", func(x int16) int16 { return x & x }, id}, {"x&0", func(x int16) int16 { return x & 0 }, zero}, {"x&-1", func(x int16) int16 { return x & -1 }, id}, {"x^x", func(x int16) int16 { return x ^ x }, zero}, {"x^0", func(x int16) int16 { return x ^ 0 }, id}, {"x^-1", func(x int16) int16 { return x ^ -1 }, func(x int16) int16 { return ^x }}, {"x+0", func(x int16) int16 { return x + 0 }, id}, {"x-x", func(x int16) int16 { return x - x }, zero}, {"x*0", func(x int16) int16 { return x * 0 }, zero}, {"^^x", func(x int16) int16 { return ^^x }, id}, } { for _, v := range values { got := test.f(v) want := test.golden(v) if want != got { t.Errorf("[%s](%d)=%d, want %d", test.name, v, got, want) } } } for _, test := range [...]struct { name string f func(int16, int16) int16 golden func(int16, int16) int16 }{ {"x|(x|y)", func(x, y int16) int16 { return x | (x | y) }, or}, {"x|(y|x)", func(x, y int16) int16 { return x | (y | x) }, or}, {"(x|y)|x", func(x, y int16) int16 { return (x | y) | x }, or}, {"(y|x)|x", func(x, y int16) int16 { return (y | x) | x }, or}, {"x&(x&y)", func(x, y int16) int16 { return x & (x & y) }, and}, {"x&(y&x)", func(x, y int16) int16 { return x & (y & x) }, and}, {"(x&y)&x", func(x, y int16) int16 { return (x & y) & x }, and}, {"(y&x)&x", func(x, y int16) int16 { return (y & x) & x }, and}, {"x^(x^y)", func(x, y int16) int16 { return x ^ (x ^ y) }, y}, {"x^(y^x)", func(x, y int16) int16 { return x ^ (y ^ x) }, y}, {"(x^y)^x", func(x, y int16) int16 { return (x ^ y) ^ x }, y}, {"(y^x)^x", func(x, y int16) int16 { return (y ^ x) ^ x }, y}, {"-(y-x)", func(x, y int16) int16 { return -(y - x) }, func(x, y int16) int16 { return x - y }}, {"(x+y)-x", func(x, y int16) int16 { return (x + y) - x }, y}, {"(y+x)-x", func(x, y int16) int16 { return (y + x) - x }, y}, } { for _, v := range values { for _, w := range values { got := test.f(v, w) want := test.golden(v, w) if want != got { t.Errorf("[%s](%d,%d)=%d, want %d", test.name, v, w, got, want) } } } } } func TestLogic8(t *testing.T) { // test values to determine function equality values := [...]int8{-1 << 7, 1<<7 - 1, -4, -3, -2, -1, 0, 1, 2, 3, 4} // golden functions we use repeatedly zero := func(x int8) int8 { return 0 } id := func(x int8) int8 { return x } or := func(x, y int8) int8 { return x | y } and := func(x, y int8) int8 { return x & y } y := func(x, y int8) int8 { return y } for _, test := range [...]struct { name string f func(int8) int8 golden func(int8) int8 }{ {"x|x", func(x int8) int8 { return x | x }, id}, {"x|0", func(x int8) int8 { return x | 0 }, id}, {"x|-1", func(x int8) int8 { return x | -1 }, func(x int8) int8 { return -1 }}, {"x&x", func(x int8) int8 { return x & x }, id}, {"x&0", func(x int8) int8 { return x & 0 }, zero}, {"x&-1", func(x int8) int8 { return x & -1 }, id}, {"x^x", func(x int8) int8 { return x ^ x }, zero}, {"x^0", func(x int8) int8 { return x ^ 0 }, id}, {"x^-1", func(x int8) int8 { return x ^ -1 }, func(x int8) int8 { return ^x }}, {"x+0", func(x int8) int8 { return x + 0 }, id}, {"x-x", func(x int8) int8 { return x - x }, zero}, {"x*0", func(x int8) int8 { return x * 0 }, zero}, {"^^x", func(x int8) int8 { return ^^x }, id}, } { for _, v := range values { got := test.f(v) want := test.golden(v) if want != got { t.Errorf("[%s](%d)=%d, want %d", test.name, v, got, want) } } } for _, test := range [...]struct { name string f func(int8, int8) int8 golden func(int8, int8) int8 }{ {"x|(x|y)", func(x, y int8) int8 { return x | (x | y) }, or}, {"x|(y|x)", func(x, y int8) int8 { return x | (y | x) }, or}, {"(x|y)|x", func(x, y int8) int8 { return (x | y) | x }, or}, {"(y|x)|x", func(x, y int8) int8 { return (y | x) | x }, or}, {"x&(x&y)", func(x, y int8) int8 { return x & (x & y) }, and}, {"x&(y&x)", func(x, y int8) int8 { return x & (y & x) }, and}, {"(x&y)&x", func(x, y int8) int8 { return (x & y) & x }, and}, {"(y&x)&x", func(x, y int8) int8 { return (y & x) & x }, and}, {"x^(x^y)", func(x, y int8) int8 { return x ^ (x ^ y) }, y}, {"x^(y^x)", func(x, y int8) int8 { return x ^ (y ^ x) }, y}, {"(x^y)^x", func(x, y int8) int8 { return (x ^ y) ^ x }, y}, {"(y^x)^x", func(x, y int8) int8 { return (y ^ x) ^ x }, y}, {"-(y-x)", func(x, y int8) int8 { return -(y - x) }, func(x, y int8) int8 { return x - y }}, {"(x+y)-x", func(x, y int8) int8 { return (x + y) - x }, y}, {"(y+x)-x", func(x, y int8) int8 { return (y + x) - x }, y}, } { for _, v := range values { for _, w := range values { got := test.f(v, w) want := test.golden(v, w) if want != got { t.Errorf("[%s](%d,%d)=%d, want %d", test.name, v, w, got, want) } } } } } PK ! Q{�) �) pgo_inl_test.gonu �[��� // Copyright 2017 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 test import ( "bufio" "bytes" "fmt" "internal/profile" "internal/testenv" "io" "os" "path/filepath" "regexp" "strings" "testing" ) func buildPGOInliningTest(t *testing.T, dir string, gcflag string) []byte { const pkg = "example.com/pgo/inline" // Add a go.mod so we have a consistent symbol names in this temp dir. goMod := fmt.Sprintf(`module %s go 1.19 `, pkg) if err := os.WriteFile(filepath.Join(dir, "go.mod"), []byte(goMod), 0644); err != nil { t.Fatalf("error writing go.mod: %v", err) } exe := filepath.Join(dir, "test.exe") args := []string{"test", "-c", "-o", exe, "-gcflags=" + gcflag} cmd := testenv.Command(t, testenv.GoToolPath(t), args...) cmd.Dir = dir cmd = testenv.CleanCmdEnv(cmd) t.Log(cmd) out, err := cmd.CombinedOutput() if err != nil { t.Fatalf("build failed: %v, output:\n%s", err, out) } return out } // testPGOIntendedInlining tests that specific functions are inlined. func testPGOIntendedInlining(t *testing.T, dir string) { testenv.MustHaveGoRun(t) t.Parallel() const pkg = "example.com/pgo/inline" want := []string{ "(*BS).NS", } // The functions which are not expected to be inlined are as follows. wantNot := []string{ // The calling edge main->A is hot and the cost of A is large // than inlineHotCalleeMaxBudget. "A", // The calling edge BenchmarkA" -> benchmarkB is cold and the // cost of A is large than inlineMaxBudget. "benchmarkB", } must := map[string]bool{ "(*BS).NS": true, } notInlinedReason := make(map[string]string) for _, fname := range want { fullName := pkg + "." + fname if _, ok := notInlinedReason[fullName]; ok { t.Errorf("duplicate func: %s", fullName) } notInlinedReason[fullName] = "unknown reason" } // If the compiler emit "cannot inline for function A", the entry A // in expectedNotInlinedList will be removed. expectedNotInlinedList := make(map[string]struct{}) for _, fname := range wantNot { fullName := pkg + "." + fname expectedNotInlinedList[fullName] = struct{}{} } // Build the test with the profile. Use a smaller threshold to test. // TODO: maybe adjust the test to work with default threshold. pprof := filepath.Join(dir, "inline_hot.pprof") gcflag := fmt.Sprintf("-m -m -pgoprofile=%s -d=pgoinlinebudget=160,pgoinlinecdfthreshold=90", pprof) out := buildPGOInliningTest(t, dir, gcflag) scanner := bufio.NewScanner(bytes.NewReader(out)) curPkg := "" canInline := regexp.MustCompile(`: can inline ([^ ]*)`) haveInlined := regexp.MustCompile(`: inlining call to ([^ ]*)`) cannotInline := regexp.MustCompile(`: cannot inline ([^ ]*): (.*)`) for scanner.Scan() { line := scanner.Text() t.Logf("child: %s", line) if strings.HasPrefix(line, "# ") { curPkg = line[2:] splits := strings.Split(curPkg, " ") curPkg = splits[0] continue } if m := haveInlined.FindStringSubmatch(line); m != nil { fname := m[1] delete(notInlinedReason, curPkg+"."+fname) continue } if m := canInline.FindStringSubmatch(line); m != nil { fname := m[1] fullname := curPkg + "." + fname // If function must be inlined somewhere, being inlinable is not enough if _, ok := must[fullname]; !ok { delete(notInlinedReason, fullname) continue } } if m := cannotInline.FindStringSubmatch(line); m != nil { fname, reason := m[1], m[2] fullName := curPkg + "." + fname if _, ok := notInlinedReason[fullName]; ok { // cmd/compile gave us a reason why notInlinedReason[fullName] = reason } delete(expectedNotInlinedList, fullName) continue } } if err := scanner.Err(); err != nil { t.Fatalf("error reading output: %v", err) } for fullName, reason := range notInlinedReason { t.Errorf("%s was not inlined: %s", fullName, reason) } // If the list expectedNotInlinedList is not empty, it indicates // the functions in the expectedNotInlinedList are marked with caninline. for fullName, _ := range expectedNotInlinedList { t.Errorf("%s was expected not inlined", fullName) } } // TestPGOIntendedInlining tests that specific functions are inlined when PGO // is applied to the exact source that was profiled. func TestPGOIntendedInlining(t *testing.T) { wd, err := os.Getwd() if err != nil { t.Fatalf("error getting wd: %v", err) } srcDir := filepath.Join(wd, "testdata/pgo/inline") // Copy the module to a scratch location so we can add a go.mod. dir := t.TempDir() for _, file := range []string{"inline_hot.go", "inline_hot_test.go", "inline_hot.pprof"} { if err := copyFile(filepath.Join(dir, file), filepath.Join(srcDir, file)); err != nil { t.Fatalf("error copying %s: %v", file, err) } } testPGOIntendedInlining(t, dir) } // TestPGOIntendedInlining tests that specific functions are inlined when PGO // is applied to the modified source. func TestPGOIntendedInliningShiftedLines(t *testing.T) { wd, err := os.Getwd() if err != nil { t.Fatalf("error getting wd: %v", err) } srcDir := filepath.Join(wd, "testdata/pgo/inline") // Copy the module to a scratch location so we can modify the source. dir := t.TempDir() // Copy most of the files unmodified. for _, file := range []string{"inline_hot_test.go", "inline_hot.pprof"} { if err := copyFile(filepath.Join(dir, file), filepath.Join(srcDir, file)); err != nil { t.Fatalf("error copying %s : %v", file, err) } } // Add some comments to the top of inline_hot.go. This adjusts the line // numbers of all of the functions without changing the semantics. src, err := os.Open(filepath.Join(srcDir, "inline_hot.go")) if err != nil { t.Fatalf("error opening src inline_hot.go: %v", err) } defer src.Close() dst, err := os.Create(filepath.Join(dir, "inline_hot.go")) if err != nil { t.Fatalf("error creating dst inline_hot.go: %v", err) } defer dst.Close() if _, err := io.WriteString(dst, `// Autogenerated // Lines `); err != nil { t.Fatalf("error writing comments to dst: %v", err) } if _, err := io.Copy(dst, src); err != nil { t.Fatalf("error copying inline_hot.go: %v", err) } dst.Close() testPGOIntendedInlining(t, dir) } // TestPGOSingleIndex tests that the sample index can not be 1 and compilation // will not fail. All it should care about is that the sample type is either // CPU nanoseconds or samples count, whichever it finds first. func TestPGOSingleIndex(t *testing.T) { for _, tc := range []struct { originalIndex int }{{ // The `testdata/pgo/inline/inline_hot.pprof` file is a standard CPU // profile as the runtime would generate. The 0 index contains the // value-type samples and value-unit count. The 1 index contains the // value-type cpu and value-unit nanoseconds. These tests ensure that // the compiler can work with profiles that only have a single index, // but are either samples count or CPU nanoseconds. originalIndex: 0, }, { originalIndex: 1, }} { t.Run(fmt.Sprintf("originalIndex=%d", tc.originalIndex), func(t *testing.T) { wd, err := os.Getwd() if err != nil { t.Fatalf("error getting wd: %v", err) } srcDir := filepath.Join(wd, "testdata/pgo/inline") // Copy the module to a scratch location so we can add a go.mod. dir := t.TempDir() originalPprofFile, err := os.Open(filepath.Join(srcDir, "inline_hot.pprof")) if err != nil { t.Fatalf("error opening inline_hot.pprof: %v", err) } defer originalPprofFile.Close() p, err := profile.Parse(originalPprofFile) if err != nil { t.Fatalf("error parsing inline_hot.pprof: %v", err) } // Move the samples count value-type to the 0 index. p.SampleType = []*profile.ValueType{p.SampleType[tc.originalIndex]} // Ensure we only have a single set of sample values. for _, s := range p.Sample { s.Value = []int64{s.Value[tc.originalIndex]} } modifiedPprofFile, err := os.Create(filepath.Join(dir, "inline_hot.pprof")) if err != nil { t.Fatalf("error creating inline_hot.pprof: %v", err) } defer modifiedPprofFile.Close() if err := p.Write(modifiedPprofFile); err != nil { t.Fatalf("error writing inline_hot.pprof: %v", err) } for _, file := range []string{"inline_hot.go", "inline_hot_test.go"} { if err := copyFile(filepath.Join(dir, file), filepath.Join(srcDir, file)); err != nil { t.Fatalf("error copying %s: %v", file, err) } } testPGOIntendedInlining(t, dir) }) } } func copyFile(dst, src string) error { s, err := os.Open(src) if err != nil { return err } defer s.Close() d, err := os.Create(dst) if err != nil { return err } defer d.Close() _, err = io.Copy(d, s) return err } // TestPGOHash tests that PGO optimization decisions can be selected by pgohash. func TestPGOHash(t *testing.T) { testenv.MustHaveGoRun(t) t.Parallel() const pkg = "example.com/pgo/inline" wd, err := os.Getwd() if err != nil { t.Fatalf("error getting wd: %v", err) } srcDir := filepath.Join(wd, "testdata/pgo/inline") // Copy the module to a scratch location so we can add a go.mod. dir := t.TempDir() for _, file := range []string{"inline_hot.go", "inline_hot_test.go", "inline_hot.pprof"} { if err := copyFile(filepath.Join(dir, file), filepath.Join(srcDir, file)); err != nil { t.Fatalf("error copying %s: %v", file, err) } } pprof := filepath.Join(dir, "inline_hot.pprof") // build with -trimpath so the source location (thus the hash) // does not depend on the temporary directory path. gcflag0 := fmt.Sprintf("-pgoprofile=%s -trimpath %s=>%s -d=pgoinlinebudget=160,pgoinlinecdfthreshold=90,pgodebug=1", pprof, dir, pkg) // Check that a hash match allows PGO inlining. const srcPos = "example.com/pgo/inline/inline_hot.go:81:19" const hashMatch = "pgohash triggered " + srcPos + " (inline)" pgoDebugRE := regexp.MustCompile(`hot-budget check allows inlining for call .* at ` + strings.ReplaceAll(srcPos, ".", "\\.")) hash := "v1" // 1 matches srcPos, v for verbose (print source location) gcflag := gcflag0 + ",pgohash=" + hash out := buildPGOInliningTest(t, dir, gcflag) if !bytes.Contains(out, []byte(hashMatch)) || !pgoDebugRE.Match(out) { t.Errorf("output does not contain expected source line, out:\n%s", out) } // Check that a hash mismatch turns off PGO inlining. hash = "v0" // 0 should not match srcPos gcflag = gcflag0 + ",pgohash=" + hash out = buildPGOInliningTest(t, dir, gcflag) if bytes.Contains(out, []byte(hashMatch)) || pgoDebugRE.Match(out) { t.Errorf("output contains unexpected source line, out:\n%s", out) } } PK ! �!W?u u lang_test.gonu �[��� // Copyright 2018 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 test import ( "internal/testenv" "os" "path/filepath" "testing" ) const aliasSrc = ` package x type T = int ` func TestInvalidLang(t *testing.T) { t.Parallel() testenv.MustHaveGoBuild(t) dir := t.TempDir() src := filepath.Join(dir, "alias.go") if err := os.WriteFile(src, []byte(aliasSrc), 0644); err != nil { t.Fatal(err) } outfile := filepath.Join(dir, "alias.o") if testLang(t, "go9.99", src, outfile) == nil { t.Error("compilation with -lang=go9.99 succeeded unexpectedly") } // This test will have to be adjusted if we ever reach 1.99 or 2.0. if testLang(t, "go1.99", src, outfile) == nil { t.Error("compilation with -lang=go1.99 succeeded unexpectedly") } if testLang(t, "go1.8", src, outfile) == nil { t.Error("compilation with -lang=go1.8 succeeded unexpectedly") } if err := testLang(t, "go1.9", src, outfile); err != nil { t.Errorf("compilation with -lang=go1.9 failed unexpectedly: %v", err) } } func testLang(t *testing.T, lang, src, outfile string) error { run := []string{testenv.GoToolPath(t), "tool", "compile", "-p=p", "-lang", lang, "-o", outfile, src} t.Log(run) out, err := testenv.Command(t, run[0], run[1:]...).CombinedOutput() t.Logf("%s", out) return err } PK ! ^�� testdata/divbyzero_test.gonu �[��� package main import ( "runtime" "testing" ) func checkDivByZero(f func()) (divByZero bool) { defer func() { if r := recover(); r != nil { if e, ok := r.(runtime.Error); ok && e.Error() == "runtime error: integer divide by zero" { divByZero = true } } }() f() return false } //go:noinline func div_a(i uint, s []int) int { return s[i%uint(len(s))] } //go:noinline func div_b(i uint, j uint) uint { return i / j } //go:noinline func div_c(i int) int { return 7 / (i - i) } func TestDivByZero(t *testing.T) { if got := checkDivByZero(func() { div_b(7, 0) }); !got { t.Errorf("expected div by zero for b(7, 0), got no error\n") } if got := checkDivByZero(func() { div_b(7, 7) }); got { t.Errorf("expected no error for b(7, 7), got div by zero\n") } if got := checkDivByZero(func() { div_a(4, nil) }); !got { t.Errorf("expected div by zero for a(4, nil), got no error\n") } if got := checkDivByZero(func() { div_c(5) }); !got { t.Errorf("expected div by zero for c(5), got no error\n") } } PK ! Y�15i� i� testdata/zero_test.gonu �[��� // Code generated by gen/zeroGen.go. DO NOT EDIT. package main import "testing" type Z1 struct { pre [8]byte mid [1]byte post [8]byte } //go:noinline func zero1_ssa(x *[1]byte) { *x = [1]byte{} } func testZero1(t *testing.T) { a := Z1{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [1]byte{255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero1_ssa(&a.mid) want := Z1{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [1]byte{0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero1 got=%v, want %v\n", a, want) } } type Z2 struct { pre [8]byte mid [2]byte post [8]byte } //go:noinline func zero2_ssa(x *[2]byte) { *x = [2]byte{} } func testZero2(t *testing.T) { a := Z2{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [2]byte{255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero2_ssa(&a.mid) want := Z2{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [2]byte{0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero2 got=%v, want %v\n", a, want) } } type Z3 struct { pre [8]byte mid [3]byte post [8]byte } //go:noinline func zero3_ssa(x *[3]byte) { *x = [3]byte{} } func testZero3(t *testing.T) { a := Z3{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [3]byte{255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero3_ssa(&a.mid) want := Z3{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [3]byte{0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero3 got=%v, want %v\n", a, want) } } type Z4 struct { pre [8]byte mid [4]byte post [8]byte } //go:noinline func zero4_ssa(x *[4]byte) { *x = [4]byte{} } func testZero4(t *testing.T) { a := Z4{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [4]byte{255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero4_ssa(&a.mid) want := Z4{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [4]byte{0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero4 got=%v, want %v\n", a, want) } } type Z5 struct { pre [8]byte mid [5]byte post [8]byte } //go:noinline func zero5_ssa(x *[5]byte) { *x = [5]byte{} } func testZero5(t *testing.T) { a := Z5{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [5]byte{255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero5_ssa(&a.mid) want := Z5{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [5]byte{0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero5 got=%v, want %v\n", a, want) } } type Z6 struct { pre [8]byte mid [6]byte post [8]byte } //go:noinline func zero6_ssa(x *[6]byte) { *x = [6]byte{} } func testZero6(t *testing.T) { a := Z6{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [6]byte{255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero6_ssa(&a.mid) want := Z6{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [6]byte{0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero6 got=%v, want %v\n", a, want) } } type Z7 struct { pre [8]byte mid [7]byte post [8]byte } //go:noinline func zero7_ssa(x *[7]byte) { *x = [7]byte{} } func testZero7(t *testing.T) { a := Z7{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [7]byte{255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero7_ssa(&a.mid) want := Z7{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [7]byte{0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero7 got=%v, want %v\n", a, want) } } type Z8 struct { pre [8]byte mid [8]byte post [8]byte } //go:noinline func zero8_ssa(x *[8]byte) { *x = [8]byte{} } func testZero8(t *testing.T) { a := Z8{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero8_ssa(&a.mid) want := Z8{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{0, 0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero8 got=%v, want %v\n", a, want) } } type Z9 struct { pre [8]byte mid [9]byte post [8]byte } //go:noinline func zero9_ssa(x *[9]byte) { *x = [9]byte{} } func testZero9(t *testing.T) { a := Z9{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [9]byte{255, 255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero9_ssa(&a.mid) want := Z9{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [9]byte{0, 0, 0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero9 got=%v, want %v\n", a, want) } } type Z10 struct { pre [8]byte mid [10]byte post [8]byte } //go:noinline func zero10_ssa(x *[10]byte) { *x = [10]byte{} } func testZero10(t *testing.T) { a := Z10{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [10]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero10_ssa(&a.mid) want := Z10{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [10]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero10 got=%v, want %v\n", a, want) } } type Z15 struct { pre [8]byte mid [15]byte post [8]byte } //go:noinline func zero15_ssa(x *[15]byte) { *x = [15]byte{} } func testZero15(t *testing.T) { a := Z15{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [15]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero15_ssa(&a.mid) want := Z15{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [15]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero15 got=%v, want %v\n", a, want) } } type Z16 struct { pre [8]byte mid [16]byte post [8]byte } //go:noinline func zero16_ssa(x *[16]byte) { *x = [16]byte{} } func testZero16(t *testing.T) { a := Z16{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [16]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero16_ssa(&a.mid) want := Z16{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero16 got=%v, want %v\n", a, want) } } type Z17 struct { pre [8]byte mid [17]byte post [8]byte } //go:noinline func zero17_ssa(x *[17]byte) { *x = [17]byte{} } func testZero17(t *testing.T) { a := Z17{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [17]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero17_ssa(&a.mid) want := Z17{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [17]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero17 got=%v, want %v\n", a, want) } } type Z23 struct { pre [8]byte mid [23]byte post [8]byte } //go:noinline func zero23_ssa(x *[23]byte) { *x = [23]byte{} } func testZero23(t *testing.T) { a := Z23{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [23]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero23_ssa(&a.mid) want := Z23{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [23]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero23 got=%v, want %v\n", a, want) } } type Z24 struct { pre [8]byte mid [24]byte post [8]byte } //go:noinline func zero24_ssa(x *[24]byte) { *x = [24]byte{} } func testZero24(t *testing.T) { a := Z24{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [24]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero24_ssa(&a.mid) want := Z24{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [24]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero24 got=%v, want %v\n", a, want) } } type Z25 struct { pre [8]byte mid [25]byte post [8]byte } //go:noinline func zero25_ssa(x *[25]byte) { *x = [25]byte{} } func testZero25(t *testing.T) { a := Z25{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [25]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero25_ssa(&a.mid) want := Z25{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [25]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero25 got=%v, want %v\n", a, want) } } type Z31 struct { pre [8]byte mid [31]byte post [8]byte } //go:noinline func zero31_ssa(x *[31]byte) { *x = [31]byte{} } func testZero31(t *testing.T) { a := Z31{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [31]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero31_ssa(&a.mid) want := Z31{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [31]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero31 got=%v, want %v\n", a, want) } } type Z32 struct { pre [8]byte mid [32]byte post [8]byte } //go:noinline func zero32_ssa(x *[32]byte) { *x = [32]byte{} } func testZero32(t *testing.T) { a := Z32{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [32]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero32_ssa(&a.mid) want := Z32{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [32]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero32 got=%v, want %v\n", a, want) } } type Z33 struct { pre [8]byte mid [33]byte post [8]byte } //go:noinline func zero33_ssa(x *[33]byte) { *x = [33]byte{} } func testZero33(t *testing.T) { a := Z33{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [33]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero33_ssa(&a.mid) want := Z33{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [33]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero33 got=%v, want %v\n", a, want) } } type Z63 struct { pre [8]byte mid [63]byte post [8]byte } //go:noinline func zero63_ssa(x *[63]byte) { *x = [63]byte{} } func testZero63(t *testing.T) { a := Z63{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [63]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero63_ssa(&a.mid) want := Z63{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [63]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero63 got=%v, want %v\n", a, want) } } type Z64 struct { pre [8]byte mid [64]byte post [8]byte } //go:noinline func zero64_ssa(x *[64]byte) { *x = [64]byte{} } func testZero64(t *testing.T) { a := Z64{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [64]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero64_ssa(&a.mid) want := Z64{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [64]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero64 got=%v, want %v\n", a, want) } } type Z65 struct { pre [8]byte mid [65]byte post [8]byte } //go:noinline func zero65_ssa(x *[65]byte) { *x = [65]byte{} } func testZero65(t *testing.T) { a := Z65{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [65]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero65_ssa(&a.mid) want := Z65{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [65]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero65 got=%v, want %v\n", a, want) } } type Z1023 struct { pre [8]byte mid [1023]byte post [8]byte } //go:noinline func zero1023_ssa(x *[1023]byte) { *x = [1023]byte{} } func testZero1023(t *testing.T) { a := Z1023{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [1023]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero1023_ssa(&a.mid) want := Z1023{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [1023]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero1023 got=%v, want %v\n", a, want) } } type Z1024 struct { pre [8]byte mid [1024]byte post [8]byte } //go:noinline func zero1024_ssa(x *[1024]byte) { *x = [1024]byte{} } func testZero1024(t *testing.T) { a := Z1024{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [1024]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero1024_ssa(&a.mid) want := Z1024{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [1024]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero1024 got=%v, want %v\n", a, want) } } type Z1025 struct { pre [8]byte mid [1025]byte post [8]byte } //go:noinline func zero1025_ssa(x *[1025]byte) { *x = [1025]byte{} } func testZero1025(t *testing.T) { a := Z1025{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [1025]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero1025_ssa(&a.mid) want := Z1025{[8]byte{255, 255, 255, 255, 255, 255, 255, 255}, [1025]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} if a != want { t.Errorf("zero1025 got=%v, want %v\n", a, want) } } type Z8u1 struct { b bool val [8]byte } type Z8u2 struct { i uint16 val [8]byte } //go:noinline func zero8u1_ssa(t *Z8u1) { t.val = [8]byte{} } //go:noinline func zero8u2_ssa(t *Z8u2) { t.val = [8]byte{} } func testZero8u(t *testing.T) { a := Z8u1{false, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero8u1_ssa(&a) want := Z8u1{false, [8]byte{0, 0, 0, 0, 0, 0, 0, 0}} if a != want { t.Errorf("zero8u2 got=%v, want %v\n", a, want) } b := Z8u2{15, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} zero8u2_ssa(&b) wantb := Z8u2{15, [8]byte{0, 0, 0, 0, 0, 0, 0, 0}} if b != wantb { t.Errorf("zero8u2 got=%v, want %v\n", b, wantb) } } type Z16u1 struct { b bool val [16]byte } type Z16u2 struct { i uint16 val [16]byte } //go:noinline func zero16u1_ssa(t *Z16u1) { t.val = [16]byte{} } //go:noinline func zero16u2_ssa(t *Z16u2) { t.val = [16]byte{} } func testZero16u(t *testing.T) { a := Z16u1{false, [16]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} zero16u1_ssa(&a) want := Z16u1{false, [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} if a != want { t.Errorf("zero16u2 got=%v, want %v\n", a, want) } b := Z16u2{15, [16]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} zero16u2_ssa(&b) wantb := Z16u2{15, [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} if b != wantb { t.Errorf("zero16u2 got=%v, want %v\n", b, wantb) } } type Z24u1 struct { b bool val [24]byte } type Z24u2 struct { i uint16 val [24]byte } //go:noinline func zero24u1_ssa(t *Z24u1) { t.val = [24]byte{} } //go:noinline func zero24u2_ssa(t *Z24u2) { t.val = [24]byte{} } func testZero24u(t *testing.T) { a := Z24u1{false, [24]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} zero24u1_ssa(&a) want := Z24u1{false, [24]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} if a != want { t.Errorf("zero24u2 got=%v, want %v\n", a, want) } b := Z24u2{15, [24]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} zero24u2_ssa(&b) wantb := Z24u2{15, [24]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} if b != wantb { t.Errorf("zero24u2 got=%v, want %v\n", b, wantb) } } type Z32u1 struct { b bool val [32]byte } type Z32u2 struct { i uint16 val [32]byte } //go:noinline func zero32u1_ssa(t *Z32u1) { t.val = [32]byte{} } //go:noinline func zero32u2_ssa(t *Z32u2) { t.val = [32]byte{} } func testZero32u(t *testing.T) { a := Z32u1{false, [32]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} zero32u1_ssa(&a) want := Z32u1{false, [32]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} if a != want { t.Errorf("zero32u2 got=%v, want %v\n", a, want) } b := Z32u2{15, [32]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} zero32u2_ssa(&b) wantb := Z32u2{15, [32]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} if b != wantb { t.Errorf("zero32u2 got=%v, want %v\n", b, wantb) } } type Z64u1 struct { b bool val [64]byte } type Z64u2 struct { i uint16 val [64]byte } //go:noinline func zero64u1_ssa(t *Z64u1) { t.val = [64]byte{} } //go:noinline func zero64u2_ssa(t *Z64u2) { t.val = [64]byte{} } func testZero64u(t *testing.T) { a := Z64u1{false, [64]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} zero64u1_ssa(&a) want := Z64u1{false, [64]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} if a != want { t.Errorf("zero64u2 got=%v, want %v\n", a, want) } b := Z64u2{15, [64]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} zero64u2_ssa(&b) wantb := Z64u2{15, [64]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} if b != wantb { t.Errorf("zero64u2 got=%v, want %v\n", b, wantb) } } type Z256u1 struct { b bool val [256]byte } type Z256u2 struct { i uint16 val [256]byte } //go:noinline func zero256u1_ssa(t *Z256u1) { t.val = [256]byte{} } //go:noinline func zero256u2_ssa(t *Z256u2) { t.val = [256]byte{} } func testZero256u(t *testing.T) { a := Z256u1{false, [256]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} zero256u1_ssa(&a) want := Z256u1{false, [256]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} if a != want { t.Errorf("zero256u2 got=%v, want %v\n", a, want) } b := Z256u2{15, [256]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} zero256u2_ssa(&b) wantb := Z256u2{15, [256]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} if b != wantb { t.Errorf("zero256u2 got=%v, want %v\n", b, wantb) } } func TestZero(t *testing.T) { testZero1(t) testZero2(t) testZero3(t) testZero4(t) testZero5(t) testZero6(t) testZero7(t) testZero8(t) testZero9(t) testZero10(t) testZero15(t) testZero16(t) testZero17(t) testZero23(t) testZero24(t) testZero25(t) testZero31(t) testZero32(t) testZero33(t) testZero63(t) testZero64(t) testZero65(t) testZero1023(t) testZero1024(t) testZero1025(t) testZero8u(t) testZero16u(t) testZero24u(t) testZero32u(t) testZero64u(t) testZero256u(t) } PK ! ?;d~� � testdata/regalloc_test.gonu �[��� // Copyright 2015 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. // Tests phi implementation package main import "testing" func phiOverwrite_ssa() int { var n int for i := 0; i < 10; i++ { if i == 6 { break } n = i } return n } func phiOverwrite(t *testing.T) { want := 5 got := phiOverwrite_ssa() if got != want { t.Errorf("phiOverwrite_ssa()= %d, got %d", want, got) } } func phiOverwriteBig_ssa() int { var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z int a = 1 for idx := 0; idx < 26; idx++ { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z = b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, a } return a*1 + b*2 + c*3 + d*4 + e*5 + f*6 + g*7 + h*8 + i*9 + j*10 + k*11 + l*12 + m*13 + n*14 + o*15 + p*16 + q*17 + r*18 + s*19 + t*20 + u*21 + v*22 + w*23 + x*24 + y*25 + z*26 } func phiOverwriteBig(t *testing.T) { want := 1 got := phiOverwriteBig_ssa() if got != want { t.Errorf("phiOverwriteBig_ssa()= %d, got %d", want, got) } } func TestRegalloc(t *testing.T) { phiOverwrite(t) phiOverwriteBig(t) } PK ! ���� � testdata/phi_test.gonu �[��� // 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. package main // Test to make sure spills of cast-shortened values // don't end up spilling the pre-shortened size instead // of the post-shortened size. import ( "runtime" "testing" ) var data1 [26]int32 var data2 [26]int64 func init() { for i := 0; i < 26; i++ { // If we spill all 8 bytes of this datum, the 1 in the high-order 4 bytes // will overwrite some other variable in the stack frame. data2[i] = 0x100000000 } } func foo() int32 { var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z int32 if always { a = data1[0] b = data1[1] c = data1[2] d = data1[3] e = data1[4] f = data1[5] g = data1[6] h = data1[7] i = data1[8] j = data1[9] k = data1[10] l = data1[11] m = data1[12] n = data1[13] o = data1[14] p = data1[15] q = data1[16] r = data1[17] s = data1[18] t = data1[19] u = data1[20] v = data1[21] w = data1[22] x = data1[23] y = data1[24] z = data1[25] } else { a = int32(data2[0]) b = int32(data2[1]) c = int32(data2[2]) d = int32(data2[3]) e = int32(data2[4]) f = int32(data2[5]) g = int32(data2[6]) h = int32(data2[7]) i = int32(data2[8]) j = int32(data2[9]) k = int32(data2[10]) l = int32(data2[11]) m = int32(data2[12]) n = int32(data2[13]) o = int32(data2[14]) p = int32(data2[15]) q = int32(data2[16]) r = int32(data2[17]) s = int32(data2[18]) t = int32(data2[19]) u = int32(data2[20]) v = int32(data2[21]) w = int32(data2[22]) x = int32(data2[23]) y = int32(data2[24]) z = int32(data2[25]) } // Lots of phis of the form phi(int32,int64) of type int32 happen here. // Some will be stack phis. For those stack phis, make sure the spill // of the second argument uses the phi's width (4 bytes), not its width // (8 bytes). Otherwise, a random stack slot gets clobbered. runtime.Gosched() return a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r + s + t + u + v + w + x + y + z } func TestPhi(t *testing.T) { want := int32(0) got := foo() if got != want { t.Fatalf("want %d, got %d\n", want, got) } } PK ! �Ȩ�� � testdata/cmp_test.gonu �[��� // Copyright 2015 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. // cmp_ssa.go tests compare simplification operations. package main import "testing" //go:noinline func eq_ssa(a int64) bool { return 4+a == 10 } //go:noinline func neq_ssa(a int64) bool { return 10 != a+4 } func testCmp(t *testing.T) { if wanted, got := true, eq_ssa(6); wanted != got { t.Errorf("eq_ssa: expected %v, got %v\n", wanted, got) } if wanted, got := false, eq_ssa(7); wanted != got { t.Errorf("eq_ssa: expected %v, got %v\n", wanted, got) } if wanted, got := false, neq_ssa(6); wanted != got { t.Errorf("neq_ssa: expected %v, got %v\n", wanted, got) } if wanted, got := true, neq_ssa(7); wanted != got { t.Errorf("neq_ssa: expected %v, got %v\n", wanted, got) } } func TestCmp(t *testing.T) { testCmp(t) } PK ! @o�� � testdata/short_test.gonu �[��� // Copyright 2015 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. // Tests short circuiting. package main import "testing" func and_ssa(arg1, arg2 bool) bool { return arg1 && rightCall(arg2) } func or_ssa(arg1, arg2 bool) bool { return arg1 || rightCall(arg2) } var rightCalled bool //go:noinline func rightCall(v bool) bool { rightCalled = true return v panic("unreached") } func testAnd(t *testing.T, arg1, arg2, wantRes bool) { testShortCircuit(t, "AND", arg1, arg2, and_ssa, arg1, wantRes) } func testOr(t *testing.T, arg1, arg2, wantRes bool) { testShortCircuit(t, "OR", arg1, arg2, or_ssa, !arg1, wantRes) } func testShortCircuit(t *testing.T, opName string, arg1, arg2 bool, fn func(bool, bool) bool, wantRightCall, wantRes bool) { rightCalled = false got := fn(arg1, arg2) if rightCalled != wantRightCall { t.Errorf("failed for %t %s %t; rightCalled=%t want=%t", arg1, opName, arg2, rightCalled, wantRightCall) } if wantRes != got { t.Errorf("failed for %t %s %t; res=%t want=%t", arg1, opName, arg2, got, wantRes) } } // TestShortCircuit tests OANDAND and OOROR expressions and short circuiting. func TestShortCircuit(t *testing.T) { testAnd(t, false, false, false) testAnd(t, false, true, false) testAnd(t, true, false, false) testAnd(t, true, true, true) testOr(t, false, false, false) testOr(t, false, true, true) testOr(t, true, false, true) testOr(t, true, true, true) } PK ! �}�� testdata/sqrtConst_test.gonu �[��� // 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. package main import ( "math" "testing" ) var tests = [...]struct { name string in float64 // used for error messages, not an input got float64 want float64 }{ {"sqrt0", 0, math.Sqrt(0), 0}, {"sqrt1", 1, math.Sqrt(1), 1}, {"sqrt2", 2, math.Sqrt(2), math.Sqrt2}, {"sqrt4", 4, math.Sqrt(4), 2}, {"sqrt100", 100, math.Sqrt(100), 10}, {"sqrt101", 101, math.Sqrt(101), 10.04987562112089}, } var nanTests = [...]struct { name string in float64 // used for error messages, not an input got float64 }{ {"sqrtNaN", math.NaN(), math.Sqrt(math.NaN())}, {"sqrtNegative", -1, math.Sqrt(-1)}, {"sqrtNegInf", math.Inf(-1), math.Sqrt(math.Inf(-1))}, } func TestSqrtConst(t *testing.T) { for _, test := range tests { if test.got != test.want { t.Errorf("%s: math.Sqrt(%f): got %f, want %f\n", test.name, test.in, test.got, test.want) } } for _, test := range nanTests { if math.IsNaN(test.got) != true { t.Errorf("%s: math.Sqrt(%f): got %f, want NaN\n", test.name, test.in, test.got) } } if got := math.Sqrt(math.Inf(1)); !math.IsInf(got, 1) { t.Errorf("math.Sqrt(+Inf), got %f, want +Inf\n", got) } } PK ! BNﭷX �X testdata/copy_test.gonu �[��� // Code generated by gen/copyGen.go. DO NOT EDIT. package main import "testing" type T1 struct { pre [8]byte mid [1]byte post [8]byte } //go:noinline func t1copy_ssa(y, x *[1]byte) { *y = *x } func testCopy1(t *testing.T) { a := T1{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1]byte{0}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [1]byte{100} t1copy_ssa(&a.mid, &x) want := T1{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1]byte{100}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t1copy got=%v, want %v\n", a, want) } } type T2 struct { pre [8]byte mid [2]byte post [8]byte } //go:noinline func t2copy_ssa(y, x *[2]byte) { *y = *x } func testCopy2(t *testing.T) { a := T2{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [2]byte{0, 1}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [2]byte{100, 101} t2copy_ssa(&a.mid, &x) want := T2{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [2]byte{100, 101}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t2copy got=%v, want %v\n", a, want) } } type T3 struct { pre [8]byte mid [3]byte post [8]byte } //go:noinline func t3copy_ssa(y, x *[3]byte) { *y = *x } func testCopy3(t *testing.T) { a := T3{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [3]byte{0, 1, 2}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [3]byte{100, 101, 102} t3copy_ssa(&a.mid, &x) want := T3{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [3]byte{100, 101, 102}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t3copy got=%v, want %v\n", a, want) } } type T4 struct { pre [8]byte mid [4]byte post [8]byte } //go:noinline func t4copy_ssa(y, x *[4]byte) { *y = *x } func testCopy4(t *testing.T) { a := T4{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [4]byte{0, 1, 2, 3}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [4]byte{100, 101, 102, 103} t4copy_ssa(&a.mid, &x) want := T4{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [4]byte{100, 101, 102, 103}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t4copy got=%v, want %v\n", a, want) } } type T5 struct { pre [8]byte mid [5]byte post [8]byte } //go:noinline func t5copy_ssa(y, x *[5]byte) { *y = *x } func testCopy5(t *testing.T) { a := T5{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [5]byte{0, 1, 2, 3, 4}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [5]byte{100, 101, 102, 103, 104} t5copy_ssa(&a.mid, &x) want := T5{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [5]byte{100, 101, 102, 103, 104}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t5copy got=%v, want %v\n", a, want) } } type T6 struct { pre [8]byte mid [6]byte post [8]byte } //go:noinline func t6copy_ssa(y, x *[6]byte) { *y = *x } func testCopy6(t *testing.T) { a := T6{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [6]byte{0, 1, 2, 3, 4, 5}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [6]byte{100, 101, 102, 103, 104, 105} t6copy_ssa(&a.mid, &x) want := T6{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [6]byte{100, 101, 102, 103, 104, 105}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t6copy got=%v, want %v\n", a, want) } } type T7 struct { pre [8]byte mid [7]byte post [8]byte } //go:noinline func t7copy_ssa(y, x *[7]byte) { *y = *x } func testCopy7(t *testing.T) { a := T7{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [7]byte{0, 1, 2, 3, 4, 5, 6}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [7]byte{100, 101, 102, 103, 104, 105, 106} t7copy_ssa(&a.mid, &x) want := T7{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [7]byte{100, 101, 102, 103, 104, 105, 106}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t7copy got=%v, want %v\n", a, want) } } type T8 struct { pre [8]byte mid [8]byte post [8]byte } //go:noinline func t8copy_ssa(y, x *[8]byte) { *y = *x } func testCopy8(t *testing.T) { a := T8{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [8]byte{0, 1, 2, 3, 4, 5, 6, 7}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [8]byte{100, 101, 102, 103, 104, 105, 106, 107} t8copy_ssa(&a.mid, &x) want := T8{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [8]byte{100, 101, 102, 103, 104, 105, 106, 107}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t8copy got=%v, want %v\n", a, want) } } type T9 struct { pre [8]byte mid [9]byte post [8]byte } //go:noinline func t9copy_ssa(y, x *[9]byte) { *y = *x } func testCopy9(t *testing.T) { a := T9{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [9]byte{0, 1, 2, 3, 4, 5, 6, 7, 8}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [9]byte{100, 101, 102, 103, 104, 105, 106, 107, 108} t9copy_ssa(&a.mid, &x) want := T9{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [9]byte{100, 101, 102, 103, 104, 105, 106, 107, 108}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t9copy got=%v, want %v\n", a, want) } } type T10 struct { pre [8]byte mid [10]byte post [8]byte } //go:noinline func t10copy_ssa(y, x *[10]byte) { *y = *x } func testCopy10(t *testing.T) { a := T10{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [10]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [10]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109} t10copy_ssa(&a.mid, &x) want := T10{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [10]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t10copy got=%v, want %v\n", a, want) } } type T15 struct { pre [8]byte mid [15]byte post [8]byte } //go:noinline func t15copy_ssa(y, x *[15]byte) { *y = *x } func testCopy15(t *testing.T) { a := T15{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [15]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [15]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114} t15copy_ssa(&a.mid, &x) want := T15{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [15]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t15copy got=%v, want %v\n", a, want) } } type T16 struct { pre [8]byte mid [16]byte post [8]byte } //go:noinline func t16copy_ssa(y, x *[16]byte) { *y = *x } func testCopy16(t *testing.T) { a := T16{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [16]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [16]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115} t16copy_ssa(&a.mid, &x) want := T16{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [16]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t16copy got=%v, want %v\n", a, want) } } type T17 struct { pre [8]byte mid [17]byte post [8]byte } //go:noinline func t17copy_ssa(y, x *[17]byte) { *y = *x } func testCopy17(t *testing.T) { a := T17{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [17]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [17]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116} t17copy_ssa(&a.mid, &x) want := T17{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [17]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t17copy got=%v, want %v\n", a, want) } } type T23 struct { pre [8]byte mid [23]byte post [8]byte } //go:noinline func t23copy_ssa(y, x *[23]byte) { *y = *x } func testCopy23(t *testing.T) { a := T23{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [23]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [23]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122} t23copy_ssa(&a.mid, &x) want := T23{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [23]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t23copy got=%v, want %v\n", a, want) } } type T24 struct { pre [8]byte mid [24]byte post [8]byte } //go:noinline func t24copy_ssa(y, x *[24]byte) { *y = *x } func testCopy24(t *testing.T) { a := T24{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [24]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [24]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123} t24copy_ssa(&a.mid, &x) want := T24{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [24]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t24copy got=%v, want %v\n", a, want) } } type T25 struct { pre [8]byte mid [25]byte post [8]byte } //go:noinline func t25copy_ssa(y, x *[25]byte) { *y = *x } func testCopy25(t *testing.T) { a := T25{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [25]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [25]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124} t25copy_ssa(&a.mid, &x) want := T25{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [25]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t25copy got=%v, want %v\n", a, want) } } type T31 struct { pre [8]byte mid [31]byte post [8]byte } //go:noinline func t31copy_ssa(y, x *[31]byte) { *y = *x } func testCopy31(t *testing.T) { a := T31{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [31]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [31]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130} t31copy_ssa(&a.mid, &x) want := T31{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [31]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t31copy got=%v, want %v\n", a, want) } } type T32 struct { pre [8]byte mid [32]byte post [8]byte } //go:noinline func t32copy_ssa(y, x *[32]byte) { *y = *x } func testCopy32(t *testing.T) { a := T32{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [32]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [32]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131} t32copy_ssa(&a.mid, &x) want := T32{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [32]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t32copy got=%v, want %v\n", a, want) } } type T33 struct { pre [8]byte mid [33]byte post [8]byte } //go:noinline func t33copy_ssa(y, x *[33]byte) { *y = *x } func testCopy33(t *testing.T) { a := T33{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [33]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [33]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132} t33copy_ssa(&a.mid, &x) want := T33{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [33]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t33copy got=%v, want %v\n", a, want) } } type T63 struct { pre [8]byte mid [63]byte post [8]byte } //go:noinline func t63copy_ssa(y, x *[63]byte) { *y = *x } func testCopy63(t *testing.T) { a := T63{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [63]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [63]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162} t63copy_ssa(&a.mid, &x) want := T63{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [63]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t63copy got=%v, want %v\n", a, want) } } type T64 struct { pre [8]byte mid [64]byte post [8]byte } //go:noinline func t64copy_ssa(y, x *[64]byte) { *y = *x } func testCopy64(t *testing.T) { a := T64{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [64]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [64]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163} t64copy_ssa(&a.mid, &x) want := T64{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [64]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t64copy got=%v, want %v\n", a, want) } } type T65 struct { pre [8]byte mid [65]byte post [8]byte } //go:noinline func t65copy_ssa(y, x *[65]byte) { *y = *x } func testCopy65(t *testing.T) { a := T65{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [65]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [65]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164} t65copy_ssa(&a.mid, &x) want := T65{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [65]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t65copy got=%v, want %v\n", a, want) } } type T1023 struct { pre [8]byte mid [1023]byte post [8]byte } //go:noinline func t1023copy_ssa(y, x *[1023]byte) { *y = *x } func testCopy1023(t *testing.T) { a := T1023{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1023]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [1023]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122} t1023copy_ssa(&a.mid, &x) want := T1023{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1023]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t1023copy got=%v, want %v\n", a, want) } } type T1024 struct { pre [8]byte mid [1024]byte post [8]byte } //go:noinline func t1024copy_ssa(y, x *[1024]byte) { *y = *x } func testCopy1024(t *testing.T) { a := T1024{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1024]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [1024]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123} t1024copy_ssa(&a.mid, &x) want := T1024{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1024]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t1024copy got=%v, want %v\n", a, want) } } type T1025 struct { pre [8]byte mid [1025]byte post [8]byte } //go:noinline func t1025copy_ssa(y, x *[1025]byte) { *y = *x } func testCopy1025(t *testing.T) { a := T1025{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1025]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [1025]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124} t1025copy_ssa(&a.mid, &x) want := T1025{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1025]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t1025copy got=%v, want %v\n", a, want) } } type T1031 struct { pre [8]byte mid [1031]byte post [8]byte } //go:noinline func t1031copy_ssa(y, x *[1031]byte) { *y = *x } func testCopy1031(t *testing.T) { a := T1031{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1031]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [1031]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130} t1031copy_ssa(&a.mid, &x) want := T1031{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1031]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t1031copy got=%v, want %v\n", a, want) } } type T1032 struct { pre [8]byte mid [1032]byte post [8]byte } //go:noinline func t1032copy_ssa(y, x *[1032]byte) { *y = *x } func testCopy1032(t *testing.T) { a := T1032{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1032]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [1032]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131} t1032copy_ssa(&a.mid, &x) want := T1032{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1032]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t1032copy got=%v, want %v\n", a, want) } } type T1033 struct { pre [8]byte mid [1033]byte post [8]byte } //go:noinline func t1033copy_ssa(y, x *[1033]byte) { *y = *x } func testCopy1033(t *testing.T) { a := T1033{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1033]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [1033]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132} t1033copy_ssa(&a.mid, &x) want := T1033{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1033]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t1033copy got=%v, want %v\n", a, want) } } type T1039 struct { pre [8]byte mid [1039]byte post [8]byte } //go:noinline func t1039copy_ssa(y, x *[1039]byte) { *y = *x } func testCopy1039(t *testing.T) { a := T1039{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1039]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [1039]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138} t1039copy_ssa(&a.mid, &x) want := T1039{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1039]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t1039copy got=%v, want %v\n", a, want) } } type T1040 struct { pre [8]byte mid [1040]byte post [8]byte } //go:noinline func t1040copy_ssa(y, x *[1040]byte) { *y = *x } func testCopy1040(t *testing.T) { a := T1040{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1040]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [1040]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139} t1040copy_ssa(&a.mid, &x) want := T1040{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1040]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t1040copy got=%v, want %v\n", a, want) } } type T1041 struct { pre [8]byte mid [1041]byte post [8]byte } //go:noinline func t1041copy_ssa(y, x *[1041]byte) { *y = *x } func testCopy1041(t *testing.T) { a := T1041{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1041]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} x := [1041]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140} t1041copy_ssa(&a.mid, &x) want := T1041{[8]byte{201, 202, 203, 204, 205, 206, 207, 208}, [1041]byte{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140}, [8]byte{211, 212, 213, 214, 215, 216, 217, 218}} if a != want { t.Errorf("t1041copy got=%v, want %v\n", a, want) } } //go:noinline func tu2copy_ssa(docopy bool, data [2]byte, x *[2]byte) { if docopy { *x = data } } func testUnalignedCopy2(t *testing.T) { var a [2]byte t2 := [2]byte{2, 3} tu2copy_ssa(true, t2, &a) want2 := [2]byte{2, 3} if a != want2 { t.Errorf("tu2copy got=%v, want %v\n", a, want2) } } //go:noinline func tu3copy_ssa(docopy bool, data [3]byte, x *[3]byte) { if docopy { *x = data } } func testUnalignedCopy3(t *testing.T) { var a [3]byte t3 := [3]byte{3, 4, 5} tu3copy_ssa(true, t3, &a) want3 := [3]byte{3, 4, 5} if a != want3 { t.Errorf("tu3copy got=%v, want %v\n", a, want3) } } //go:noinline func tu4copy_ssa(docopy bool, data [4]byte, x *[4]byte) { if docopy { *x = data } } func testUnalignedCopy4(t *testing.T) { var a [4]byte t4 := [4]byte{4, 5, 6, 7} tu4copy_ssa(true, t4, &a) want4 := [4]byte{4, 5, 6, 7} if a != want4 { t.Errorf("tu4copy got=%v, want %v\n", a, want4) } } //go:noinline func tu5copy_ssa(docopy bool, data [5]byte, x *[5]byte) { if docopy { *x = data } } func testUnalignedCopy5(t *testing.T) { var a [5]byte t5 := [5]byte{5, 6, 7, 8, 9} tu5copy_ssa(true, t5, &a) want5 := [5]byte{5, 6, 7, 8, 9} if a != want5 { t.Errorf("tu5copy got=%v, want %v\n", a, want5) } } //go:noinline func tu6copy_ssa(docopy bool, data [6]byte, x *[6]byte) { if docopy { *x = data } } func testUnalignedCopy6(t *testing.T) { var a [6]byte t6 := [6]byte{6, 7, 8, 9, 10, 11} tu6copy_ssa(true, t6, &a) want6 := [6]byte{6, 7, 8, 9, 10, 11} if a != want6 { t.Errorf("tu6copy got=%v, want %v\n", a, want6) } } //go:noinline func tu7copy_ssa(docopy bool, data [7]byte, x *[7]byte) { if docopy { *x = data } } func testUnalignedCopy7(t *testing.T) { var a [7]byte t7 := [7]byte{7, 8, 9, 10, 11, 12, 13} tu7copy_ssa(true, t7, &a) want7 := [7]byte{7, 8, 9, 10, 11, 12, 13} if a != want7 { t.Errorf("tu7copy got=%v, want %v\n", a, want7) } } func TestCopy(t *testing.T) { testCopy1(t) testCopy2(t) testCopy3(t) testCopy4(t) testCopy5(t) testCopy6(t) testCopy7(t) testCopy8(t) testCopy9(t) testCopy10(t) testCopy15(t) testCopy16(t) testCopy17(t) testCopy23(t) testCopy24(t) testCopy25(t) testCopy31(t) testCopy32(t) testCopy33(t) testCopy63(t) testCopy64(t) testCopy65(t) testCopy1023(t) testCopy1024(t) testCopy1025(t) testCopy1031(t) testCopy1032(t) testCopy1033(t) testCopy1039(t) testCopy1040(t) testCopy1041(t) testUnalignedCopy2(t) testUnalignedCopy3(t) testUnalignedCopy4(t) testUnalignedCopy5(t) testUnalignedCopy6(t) testUnalignedCopy7(t) } PK ! �:h1� 1� testdata/arithConst_test.gonu �[��� // Code generated by gen/arithConstGen.go. DO NOT EDIT. package main import "testing" //go:noinline func add_uint64_0(a uint64) uint64 { return a + 0 } //go:noinline func add_0_uint64(a uint64) uint64 { return 0 + a } //go:noinline func add_uint64_1(a uint64) uint64 { return a + 1 } //go:noinline func add_1_uint64(a uint64) uint64 { return 1 + a } //go:noinline func add_uint64_4294967296(a uint64) uint64 { return a + 4294967296 } //go:noinline func add_4294967296_uint64(a uint64) uint64 { return 4294967296 + a } //go:noinline func add_uint64_9223372036854775808(a uint64) uint64 { return a + 9223372036854775808 } //go:noinline func add_9223372036854775808_uint64(a uint64) uint64 { return 9223372036854775808 + a } //go:noinline func add_uint64_18446744073709551615(a uint64) uint64 { return a + 18446744073709551615 } //go:noinline func add_18446744073709551615_uint64(a uint64) uint64 { return 18446744073709551615 + a } //go:noinline func sub_uint64_0(a uint64) uint64 { return a - 0 } //go:noinline func sub_0_uint64(a uint64) uint64 { return 0 - a } //go:noinline func sub_uint64_1(a uint64) uint64 { return a - 1 } //go:noinline func sub_1_uint64(a uint64) uint64 { return 1 - a } //go:noinline func sub_uint64_4294967296(a uint64) uint64 { return a - 4294967296 } //go:noinline func sub_4294967296_uint64(a uint64) uint64 { return 4294967296 - a } //go:noinline func sub_uint64_9223372036854775808(a uint64) uint64 { return a - 9223372036854775808 } //go:noinline func sub_9223372036854775808_uint64(a uint64) uint64 { return 9223372036854775808 - a } //go:noinline func sub_uint64_18446744073709551615(a uint64) uint64 { return a - 18446744073709551615 } //go:noinline func sub_18446744073709551615_uint64(a uint64) uint64 { return 18446744073709551615 - a } //go:noinline func div_0_uint64(a uint64) uint64 { return 0 / a } //go:noinline func div_uint64_1(a uint64) uint64 { return a / 1 } //go:noinline func div_1_uint64(a uint64) uint64 { return 1 / a } //go:noinline func div_uint64_4294967296(a uint64) uint64 { return a / 4294967296 } //go:noinline func div_4294967296_uint64(a uint64) uint64 { return 4294967296 / a } //go:noinline func div_uint64_9223372036854775808(a uint64) uint64 { return a / 9223372036854775808 } //go:noinline func div_9223372036854775808_uint64(a uint64) uint64 { return 9223372036854775808 / a } //go:noinline func div_uint64_18446744073709551615(a uint64) uint64 { return a / 18446744073709551615 } //go:noinline func div_18446744073709551615_uint64(a uint64) uint64 { return 18446744073709551615 / a } //go:noinline func mul_uint64_0(a uint64) uint64 { return a * 0 } //go:noinline func mul_0_uint64(a uint64) uint64 { return 0 * a } //go:noinline func mul_uint64_1(a uint64) uint64 { return a * 1 } //go:noinline func mul_1_uint64(a uint64) uint64 { return 1 * a } //go:noinline func mul_uint64_4294967296(a uint64) uint64 { return a * 4294967296 } //go:noinline func mul_4294967296_uint64(a uint64) uint64 { return 4294967296 * a } //go:noinline func mul_uint64_9223372036854775808(a uint64) uint64 { return a * 9223372036854775808 } //go:noinline func mul_9223372036854775808_uint64(a uint64) uint64 { return 9223372036854775808 * a } //go:noinline func mul_uint64_18446744073709551615(a uint64) uint64 { return a * 18446744073709551615 } //go:noinline func mul_18446744073709551615_uint64(a uint64) uint64 { return 18446744073709551615 * a } //go:noinline func lsh_uint64_0(a uint64) uint64 { return a << 0 } //go:noinline func lsh_0_uint64(a uint64) uint64 { return 0 << a } //go:noinline func lsh_uint64_1(a uint64) uint64 { return a << 1 } //go:noinline func lsh_1_uint64(a uint64) uint64 { return 1 << a } //go:noinline func lsh_uint64_4294967296(a uint64) uint64 { return a << uint64(4294967296) } //go:noinline func lsh_4294967296_uint64(a uint64) uint64 { return 4294967296 << a } //go:noinline func lsh_uint64_9223372036854775808(a uint64) uint64 { return a << uint64(9223372036854775808) } //go:noinline func lsh_9223372036854775808_uint64(a uint64) uint64 { return 9223372036854775808 << a } //go:noinline func lsh_uint64_18446744073709551615(a uint64) uint64 { return a << uint64(18446744073709551615) } //go:noinline func lsh_18446744073709551615_uint64(a uint64) uint64 { return 18446744073709551615 << a } //go:noinline func rsh_uint64_0(a uint64) uint64 { return a >> 0 } //go:noinline func rsh_0_uint64(a uint64) uint64 { return 0 >> a } //go:noinline func rsh_uint64_1(a uint64) uint64 { return a >> 1 } //go:noinline func rsh_1_uint64(a uint64) uint64 { return 1 >> a } //go:noinline func rsh_uint64_4294967296(a uint64) uint64 { return a >> uint64(4294967296) } //go:noinline func rsh_4294967296_uint64(a uint64) uint64 { return 4294967296 >> a } //go:noinline func rsh_uint64_9223372036854775808(a uint64) uint64 { return a >> uint64(9223372036854775808) } //go:noinline func rsh_9223372036854775808_uint64(a uint64) uint64 { return 9223372036854775808 >> a } //go:noinline func rsh_uint64_18446744073709551615(a uint64) uint64 { return a >> uint64(18446744073709551615) } //go:noinline func rsh_18446744073709551615_uint64(a uint64) uint64 { return 18446744073709551615 >> a } //go:noinline func mod_0_uint64(a uint64) uint64 { return 0 % a } //go:noinline func mod_uint64_1(a uint64) uint64 { return a % 1 } //go:noinline func mod_1_uint64(a uint64) uint64 { return 1 % a } //go:noinline func mod_uint64_4294967296(a uint64) uint64 { return a % 4294967296 } //go:noinline func mod_4294967296_uint64(a uint64) uint64 { return 4294967296 % a } //go:noinline func mod_uint64_9223372036854775808(a uint64) uint64 { return a % 9223372036854775808 } //go:noinline func mod_9223372036854775808_uint64(a uint64) uint64 { return 9223372036854775808 % a } //go:noinline func mod_uint64_18446744073709551615(a uint64) uint64 { return a % 18446744073709551615 } //go:noinline func mod_18446744073709551615_uint64(a uint64) uint64 { return 18446744073709551615 % a } //go:noinline func and_uint64_0(a uint64) uint64 { return a & 0 } //go:noinline func and_0_uint64(a uint64) uint64 { return 0 & a } //go:noinline func and_uint64_1(a uint64) uint64 { return a & 1 } //go:noinline func and_1_uint64(a uint64) uint64 { return 1 & a } //go:noinline func and_uint64_4294967296(a uint64) uint64 { return a & 4294967296 } //go:noinline func and_4294967296_uint64(a uint64) uint64 { return 4294967296 & a } //go:noinline func and_uint64_9223372036854775808(a uint64) uint64 { return a & 9223372036854775808 } //go:noinline func and_9223372036854775808_uint64(a uint64) uint64 { return 9223372036854775808 & a } //go:noinline func and_uint64_18446744073709551615(a uint64) uint64 { return a & 18446744073709551615 } //go:noinline func and_18446744073709551615_uint64(a uint64) uint64 { return 18446744073709551615 & a } //go:noinline func or_uint64_0(a uint64) uint64 { return a | 0 } //go:noinline func or_0_uint64(a uint64) uint64 { return 0 | a } //go:noinline func or_uint64_1(a uint64) uint64 { return a | 1 } //go:noinline func or_1_uint64(a uint64) uint64 { return 1 | a } //go:noinline func or_uint64_4294967296(a uint64) uint64 { return a | 4294967296 } //go:noinline func or_4294967296_uint64(a uint64) uint64 { return 4294967296 | a } //go:noinline func or_uint64_9223372036854775808(a uint64) uint64 { return a | 9223372036854775808 } //go:noinline func or_9223372036854775808_uint64(a uint64) uint64 { return 9223372036854775808 | a } //go:noinline func or_uint64_18446744073709551615(a uint64) uint64 { return a | 18446744073709551615 } //go:noinline func or_18446744073709551615_uint64(a uint64) uint64 { return 18446744073709551615 | a } //go:noinline func xor_uint64_0(a uint64) uint64 { return a ^ 0 } //go:noinline func xor_0_uint64(a uint64) uint64 { return 0 ^ a } //go:noinline func xor_uint64_1(a uint64) uint64 { return a ^ 1 } //go:noinline func xor_1_uint64(a uint64) uint64 { return 1 ^ a } //go:noinline func xor_uint64_4294967296(a uint64) uint64 { return a ^ 4294967296 } //go:noinline func xor_4294967296_uint64(a uint64) uint64 { return 4294967296 ^ a } //go:noinline func xor_uint64_9223372036854775808(a uint64) uint64 { return a ^ 9223372036854775808 } //go:noinline func xor_9223372036854775808_uint64(a uint64) uint64 { return 9223372036854775808 ^ a } //go:noinline func xor_uint64_18446744073709551615(a uint64) uint64 { return a ^ 18446744073709551615 } //go:noinline func xor_18446744073709551615_uint64(a uint64) uint64 { return 18446744073709551615 ^ a } //go:noinline func mul_uint64_3(a uint64) uint64 { return a * 3 } //go:noinline func mul_3_uint64(a uint64) uint64 { return 3 * a } //go:noinline func mul_uint64_5(a uint64) uint64 { return a * 5 } //go:noinline func mul_5_uint64(a uint64) uint64 { return 5 * a } //go:noinline func mul_uint64_7(a uint64) uint64 { return a * 7 } //go:noinline func mul_7_uint64(a uint64) uint64 { return 7 * a } //go:noinline func mul_uint64_9(a uint64) uint64 { return a * 9 } //go:noinline func mul_9_uint64(a uint64) uint64 { return 9 * a } //go:noinline func mul_uint64_10(a uint64) uint64 { return a * 10 } //go:noinline func mul_10_uint64(a uint64) uint64 { return 10 * a } //go:noinline func mul_uint64_11(a uint64) uint64 { return a * 11 } //go:noinline func mul_11_uint64(a uint64) uint64 { return 11 * a } //go:noinline func mul_uint64_13(a uint64) uint64 { return a * 13 } //go:noinline func mul_13_uint64(a uint64) uint64 { return 13 * a } //go:noinline func mul_uint64_19(a uint64) uint64 { return a * 19 } //go:noinline func mul_19_uint64(a uint64) uint64 { return 19 * a } //go:noinline func mul_uint64_21(a uint64) uint64 { return a * 21 } //go:noinline func mul_21_uint64(a uint64) uint64 { return 21 * a } //go:noinline func mul_uint64_25(a uint64) uint64 { return a * 25 } //go:noinline func mul_25_uint64(a uint64) uint64 { return 25 * a } //go:noinline func mul_uint64_27(a uint64) uint64 { return a * 27 } //go:noinline func mul_27_uint64(a uint64) uint64 { return 27 * a } //go:noinline func mul_uint64_37(a uint64) uint64 { return a * 37 } //go:noinline func mul_37_uint64(a uint64) uint64 { return 37 * a } //go:noinline func mul_uint64_41(a uint64) uint64 { return a * 41 } //go:noinline func mul_41_uint64(a uint64) uint64 { return 41 * a } //go:noinline func mul_uint64_45(a uint64) uint64 { return a * 45 } //go:noinline func mul_45_uint64(a uint64) uint64 { return 45 * a } //go:noinline func mul_uint64_73(a uint64) uint64 { return a * 73 } //go:noinline func mul_73_uint64(a uint64) uint64 { return 73 * a } //go:noinline func mul_uint64_81(a uint64) uint64 { return a * 81 } //go:noinline func mul_81_uint64(a uint64) uint64 { return 81 * a } //go:noinline func add_int64_Neg9223372036854775808(a int64) int64 { return a + -9223372036854775808 } //go:noinline func add_Neg9223372036854775808_int64(a int64) int64 { return -9223372036854775808 + a } //go:noinline func add_int64_Neg9223372036854775807(a int64) int64 { return a + -9223372036854775807 } //go:noinline func add_Neg9223372036854775807_int64(a int64) int64 { return -9223372036854775807 + a } //go:noinline func add_int64_Neg4294967296(a int64) int64 { return a + -4294967296 } //go:noinline func add_Neg4294967296_int64(a int64) int64 { return -4294967296 + a } //go:noinline func add_int64_Neg1(a int64) int64 { return a + -1 } //go:noinline func add_Neg1_int64(a int64) int64 { return -1 + a } //go:noinline func add_int64_0(a int64) int64 { return a + 0 } //go:noinline func add_0_int64(a int64) int64 { return 0 + a } //go:noinline func add_int64_1(a int64) int64 { return a + 1 } //go:noinline func add_1_int64(a int64) int64 { return 1 + a } //go:noinline func add_int64_4294967296(a int64) int64 { return a + 4294967296 } //go:noinline func add_4294967296_int64(a int64) int64 { return 4294967296 + a } //go:noinline func add_int64_9223372036854775806(a int64) int64 { return a + 9223372036854775806 } //go:noinline func add_9223372036854775806_int64(a int64) int64 { return 9223372036854775806 + a } //go:noinline func add_int64_9223372036854775807(a int64) int64 { return a + 9223372036854775807 } //go:noinline func add_9223372036854775807_int64(a int64) int64 { return 9223372036854775807 + a } //go:noinline func sub_int64_Neg9223372036854775808(a int64) int64 { return a - -9223372036854775808 } //go:noinline func sub_Neg9223372036854775808_int64(a int64) int64 { return -9223372036854775808 - a } //go:noinline func sub_int64_Neg9223372036854775807(a int64) int64 { return a - -9223372036854775807 } //go:noinline func sub_Neg9223372036854775807_int64(a int64) int64 { return -9223372036854775807 - a } //go:noinline func sub_int64_Neg4294967296(a int64) int64 { return a - -4294967296 } //go:noinline func sub_Neg4294967296_int64(a int64) int64 { return -4294967296 - a } //go:noinline func sub_int64_Neg1(a int64) int64 { return a - -1 } //go:noinline func sub_Neg1_int64(a int64) int64 { return -1 - a } //go:noinline func sub_int64_0(a int64) int64 { return a - 0 } //go:noinline func sub_0_int64(a int64) int64 { return 0 - a } //go:noinline func sub_int64_1(a int64) int64 { return a - 1 } //go:noinline func sub_1_int64(a int64) int64 { return 1 - a } //go:noinline func sub_int64_4294967296(a int64) int64 { return a - 4294967296 } //go:noinline func sub_4294967296_int64(a int64) int64 { return 4294967296 - a } //go:noinline func sub_int64_9223372036854775806(a int64) int64 { return a - 9223372036854775806 } //go:noinline func sub_9223372036854775806_int64(a int64) int64 { return 9223372036854775806 - a } //go:noinline func sub_int64_9223372036854775807(a int64) int64 { return a - 9223372036854775807 } //go:noinline func sub_9223372036854775807_int64(a int64) int64 { return 9223372036854775807 - a } //go:noinline func div_int64_Neg9223372036854775808(a int64) int64 { return a / -9223372036854775808 } //go:noinline func div_Neg9223372036854775808_int64(a int64) int64 { return -9223372036854775808 / a } //go:noinline func div_int64_Neg9223372036854775807(a int64) int64 { return a / -9223372036854775807 } //go:noinline func div_Neg9223372036854775807_int64(a int64) int64 { return -9223372036854775807 / a } //go:noinline func div_int64_Neg4294967296(a int64) int64 { return a / -4294967296 } //go:noinline func div_Neg4294967296_int64(a int64) int64 { return -4294967296 / a } //go:noinline func div_int64_Neg1(a int64) int64 { return a / -1 } //go:noinline func div_Neg1_int64(a int64) int64 { return -1 / a } //go:noinline func div_0_int64(a int64) int64 { return 0 / a } //go:noinline func div_int64_1(a int64) int64 { return a / 1 } //go:noinline func div_1_int64(a int64) int64 { return 1 / a } //go:noinline func div_int64_4294967296(a int64) int64 { return a / 4294967296 } //go:noinline func div_4294967296_int64(a int64) int64 { return 4294967296 / a } //go:noinline func div_int64_9223372036854775806(a int64) int64 { return a / 9223372036854775806 } //go:noinline func div_9223372036854775806_int64(a int64) int64 { return 9223372036854775806 / a } //go:noinline func div_int64_9223372036854775807(a int64) int64 { return a / 9223372036854775807 } //go:noinline func div_9223372036854775807_int64(a int64) int64 { return 9223372036854775807 / a } //go:noinline func mul_int64_Neg9223372036854775808(a int64) int64 { return a * -9223372036854775808 } //go:noinline func mul_Neg9223372036854775808_int64(a int64) int64 { return -9223372036854775808 * a } //go:noinline func mul_int64_Neg9223372036854775807(a int64) int64 { return a * -9223372036854775807 } //go:noinline func mul_Neg9223372036854775807_int64(a int64) int64 { return -9223372036854775807 * a } //go:noinline func mul_int64_Neg4294967296(a int64) int64 { return a * -4294967296 } //go:noinline func mul_Neg4294967296_int64(a int64) int64 { return -4294967296 * a } //go:noinline func mul_int64_Neg1(a int64) int64 { return a * -1 } //go:noinline func mul_Neg1_int64(a int64) int64 { return -1 * a } //go:noinline func mul_int64_0(a int64) int64 { return a * 0 } //go:noinline func mul_0_int64(a int64) int64 { return 0 * a } //go:noinline func mul_int64_1(a int64) int64 { return a * 1 } //go:noinline func mul_1_int64(a int64) int64 { return 1 * a } //go:noinline func mul_int64_4294967296(a int64) int64 { return a * 4294967296 } //go:noinline func mul_4294967296_int64(a int64) int64 { return 4294967296 * a } //go:noinline func mul_int64_9223372036854775806(a int64) int64 { return a * 9223372036854775806 } //go:noinline func mul_9223372036854775806_int64(a int64) int64 { return 9223372036854775806 * a } //go:noinline func mul_int64_9223372036854775807(a int64) int64 { return a * 9223372036854775807 } //go:noinline func mul_9223372036854775807_int64(a int64) int64 { return 9223372036854775807 * a } //go:noinline func mod_int64_Neg9223372036854775808(a int64) int64 { return a % -9223372036854775808 } //go:noinline func mod_Neg9223372036854775808_int64(a int64) int64 { return -9223372036854775808 % a } //go:noinline func mod_int64_Neg9223372036854775807(a int64) int64 { return a % -9223372036854775807 } //go:noinline func mod_Neg9223372036854775807_int64(a int64) int64 { return -9223372036854775807 % a } //go:noinline func mod_int64_Neg4294967296(a int64) int64 { return a % -4294967296 } //go:noinline func mod_Neg4294967296_int64(a int64) int64 { return -4294967296 % a } //go:noinline func mod_int64_Neg1(a int64) int64 { return a % -1 } //go:noinline func mod_Neg1_int64(a int64) int64 { return -1 % a } //go:noinline func mod_0_int64(a int64) int64 { return 0 % a } //go:noinline func mod_int64_1(a int64) int64 { return a % 1 } //go:noinline func mod_1_int64(a int64) int64 { return 1 % a } //go:noinline func mod_int64_4294967296(a int64) int64 { return a % 4294967296 } //go:noinline func mod_4294967296_int64(a int64) int64 { return 4294967296 % a } //go:noinline func mod_int64_9223372036854775806(a int64) int64 { return a % 9223372036854775806 } //go:noinline func mod_9223372036854775806_int64(a int64) int64 { return 9223372036854775806 % a } //go:noinline func mod_int64_9223372036854775807(a int64) int64 { return a % 9223372036854775807 } //go:noinline func mod_9223372036854775807_int64(a int64) int64 { return 9223372036854775807 % a } //go:noinline func and_int64_Neg9223372036854775808(a int64) int64 { return a & -9223372036854775808 } //go:noinline func and_Neg9223372036854775808_int64(a int64) int64 { return -9223372036854775808 & a } //go:noinline func and_int64_Neg9223372036854775807(a int64) int64 { return a & -9223372036854775807 } //go:noinline func and_Neg9223372036854775807_int64(a int64) int64 { return -9223372036854775807 & a } //go:noinline func and_int64_Neg4294967296(a int64) int64 { return a & -4294967296 } //go:noinline func and_Neg4294967296_int64(a int64) int64 { return -4294967296 & a } //go:noinline func and_int64_Neg1(a int64) int64 { return a & -1 } //go:noinline func and_Neg1_int64(a int64) int64 { return -1 & a } //go:noinline func and_int64_0(a int64) int64 { return a & 0 } //go:noinline func and_0_int64(a int64) int64 { return 0 & a } //go:noinline func and_int64_1(a int64) int64 { return a & 1 } //go:noinline func and_1_int64(a int64) int64 { return 1 & a } //go:noinline func and_int64_4294967296(a int64) int64 { return a & 4294967296 } //go:noinline func and_4294967296_int64(a int64) int64 { return 4294967296 & a } //go:noinline func and_int64_9223372036854775806(a int64) int64 { return a & 9223372036854775806 } //go:noinline func and_9223372036854775806_int64(a int64) int64 { return 9223372036854775806 & a } //go:noinline func and_int64_9223372036854775807(a int64) int64 { return a & 9223372036854775807 } //go:noinline func and_9223372036854775807_int64(a int64) int64 { return 9223372036854775807 & a } //go:noinline func or_int64_Neg9223372036854775808(a int64) int64 { return a | -9223372036854775808 } //go:noinline func or_Neg9223372036854775808_int64(a int64) int64 { return -9223372036854775808 | a } //go:noinline func or_int64_Neg9223372036854775807(a int64) int64 { return a | -9223372036854775807 } //go:noinline func or_Neg9223372036854775807_int64(a int64) int64 { return -9223372036854775807 | a } //go:noinline func or_int64_Neg4294967296(a int64) int64 { return a | -4294967296 } //go:noinline func or_Neg4294967296_int64(a int64) int64 { return -4294967296 | a } //go:noinline func or_int64_Neg1(a int64) int64 { return a | -1 } //go:noinline func or_Neg1_int64(a int64) int64 { return -1 | a } //go:noinline func or_int64_0(a int64) int64 { return a | 0 } //go:noinline func or_0_int64(a int64) int64 { return 0 | a } //go:noinline func or_int64_1(a int64) int64 { return a | 1 } //go:noinline func or_1_int64(a int64) int64 { return 1 | a } //go:noinline func or_int64_4294967296(a int64) int64 { return a | 4294967296 } //go:noinline func or_4294967296_int64(a int64) int64 { return 4294967296 | a } //go:noinline func or_int64_9223372036854775806(a int64) int64 { return a | 9223372036854775806 } //go:noinline func or_9223372036854775806_int64(a int64) int64 { return 9223372036854775806 | a } //go:noinline func or_int64_9223372036854775807(a int64) int64 { return a | 9223372036854775807 } //go:noinline func or_9223372036854775807_int64(a int64) int64 { return 9223372036854775807 | a } //go:noinline func xor_int64_Neg9223372036854775808(a int64) int64 { return a ^ -9223372036854775808 } //go:noinline func xor_Neg9223372036854775808_int64(a int64) int64 { return -9223372036854775808 ^ a } //go:noinline func xor_int64_Neg9223372036854775807(a int64) int64 { return a ^ -9223372036854775807 } //go:noinline func xor_Neg9223372036854775807_int64(a int64) int64 { return -9223372036854775807 ^ a } //go:noinline func xor_int64_Neg4294967296(a int64) int64 { return a ^ -4294967296 } //go:noinline func xor_Neg4294967296_int64(a int64) int64 { return -4294967296 ^ a } //go:noinline func xor_int64_Neg1(a int64) int64 { return a ^ -1 } //go:noinline func xor_Neg1_int64(a int64) int64 { return -1 ^ a } //go:noinline func xor_int64_0(a int64) int64 { return a ^ 0 } //go:noinline func xor_0_int64(a int64) int64 { return 0 ^ a } //go:noinline func xor_int64_1(a int64) int64 { return a ^ 1 } //go:noinline func xor_1_int64(a int64) int64 { return 1 ^ a } //go:noinline func xor_int64_4294967296(a int64) int64 { return a ^ 4294967296 } //go:noinline func xor_4294967296_int64(a int64) int64 { return 4294967296 ^ a } //go:noinline func xor_int64_9223372036854775806(a int64) int64 { return a ^ 9223372036854775806 } //go:noinline func xor_9223372036854775806_int64(a int64) int64 { return 9223372036854775806 ^ a } //go:noinline func xor_int64_9223372036854775807(a int64) int64 { return a ^ 9223372036854775807 } //go:noinline func xor_9223372036854775807_int64(a int64) int64 { return 9223372036854775807 ^ a } //go:noinline func mul_int64_Neg9(a int64) int64 { return a * -9 } //go:noinline func mul_Neg9_int64(a int64) int64 { return -9 * a } //go:noinline func mul_int64_Neg5(a int64) int64 { return a * -5 } //go:noinline func mul_Neg5_int64(a int64) int64 { return -5 * a } //go:noinline func mul_int64_Neg3(a int64) int64 { return a * -3 } //go:noinline func mul_Neg3_int64(a int64) int64 { return -3 * a } //go:noinline func mul_int64_3(a int64) int64 { return a * 3 } //go:noinline func mul_3_int64(a int64) int64 { return 3 * a } //go:noinline func mul_int64_5(a int64) int64 { return a * 5 } //go:noinline func mul_5_int64(a int64) int64 { return 5 * a } //go:noinline func mul_int64_7(a int64) int64 { return a * 7 } //go:noinline func mul_7_int64(a int64) int64 { return 7 * a } //go:noinline func mul_int64_9(a int64) int64 { return a * 9 } //go:noinline func mul_9_int64(a int64) int64 { return 9 * a } //go:noinline func mul_int64_10(a int64) int64 { return a * 10 } //go:noinline func mul_10_int64(a int64) int64 { return 10 * a } //go:noinline func mul_int64_11(a int64) int64 { return a * 11 } //go:noinline func mul_11_int64(a int64) int64 { return 11 * a } //go:noinline func mul_int64_13(a int64) int64 { return a * 13 } //go:noinline func mul_13_int64(a int64) int64 { return 13 * a } //go:noinline func mul_int64_19(a int64) int64 { return a * 19 } //go:noinline func mul_19_int64(a int64) int64 { return 19 * a } //go:noinline func mul_int64_21(a int64) int64 { return a * 21 } //go:noinline func mul_21_int64(a int64) int64 { return 21 * a } //go:noinline func mul_int64_25(a int64) int64 { return a * 25 } //go:noinline func mul_25_int64(a int64) int64 { return 25 * a } //go:noinline func mul_int64_27(a int64) int64 { return a * 27 } //go:noinline func mul_27_int64(a int64) int64 { return 27 * a } //go:noinline func mul_int64_37(a int64) int64 { return a * 37 } //go:noinline func mul_37_int64(a int64) int64 { return 37 * a } //go:noinline func mul_int64_41(a int64) int64 { return a * 41 } //go:noinline func mul_41_int64(a int64) int64 { return 41 * a } //go:noinline func mul_int64_45(a int64) int64 { return a * 45 } //go:noinline func mul_45_int64(a int64) int64 { return 45 * a } //go:noinline func mul_int64_73(a int64) int64 { return a * 73 } //go:noinline func mul_73_int64(a int64) int64 { return 73 * a } //go:noinline func mul_int64_81(a int64) int64 { return a * 81 } //go:noinline func mul_81_int64(a int64) int64 { return 81 * a } //go:noinline func add_uint32_0(a uint32) uint32 { return a + 0 } //go:noinline func add_0_uint32(a uint32) uint32 { return 0 + a } //go:noinline func add_uint32_1(a uint32) uint32 { return a + 1 } //go:noinline func add_1_uint32(a uint32) uint32 { return 1 + a } //go:noinline func add_uint32_4294967295(a uint32) uint32 { return a + 4294967295 } //go:noinline func add_4294967295_uint32(a uint32) uint32 { return 4294967295 + a } //go:noinline func sub_uint32_0(a uint32) uint32 { return a - 0 } //go:noinline func sub_0_uint32(a uint32) uint32 { return 0 - a } //go:noinline func sub_uint32_1(a uint32) uint32 { return a - 1 } //go:noinline func sub_1_uint32(a uint32) uint32 { return 1 - a } //go:noinline func sub_uint32_4294967295(a uint32) uint32 { return a - 4294967295 } //go:noinline func sub_4294967295_uint32(a uint32) uint32 { return 4294967295 - a } //go:noinline func div_0_uint32(a uint32) uint32 { return 0 / a } //go:noinline func div_uint32_1(a uint32) uint32 { return a / 1 } //go:noinline func div_1_uint32(a uint32) uint32 { return 1 / a } //go:noinline func div_uint32_4294967295(a uint32) uint32 { return a / 4294967295 } //go:noinline func div_4294967295_uint32(a uint32) uint32 { return 4294967295 / a } //go:noinline func mul_uint32_0(a uint32) uint32 { return a * 0 } //go:noinline func mul_0_uint32(a uint32) uint32 { return 0 * a } //go:noinline func mul_uint32_1(a uint32) uint32 { return a * 1 } //go:noinline func mul_1_uint32(a uint32) uint32 { return 1 * a } //go:noinline func mul_uint32_4294967295(a uint32) uint32 { return a * 4294967295 } //go:noinline func mul_4294967295_uint32(a uint32) uint32 { return 4294967295 * a } //go:noinline func lsh_uint32_0(a uint32) uint32 { return a << 0 } //go:noinline func lsh_0_uint32(a uint32) uint32 { return 0 << a } //go:noinline func lsh_uint32_1(a uint32) uint32 { return a << 1 } //go:noinline func lsh_1_uint32(a uint32) uint32 { return 1 << a } //go:noinline func lsh_uint32_4294967295(a uint32) uint32 { return a << 4294967295 } //go:noinline func lsh_4294967295_uint32(a uint32) uint32 { return 4294967295 << a } //go:noinline func rsh_uint32_0(a uint32) uint32 { return a >> 0 } //go:noinline func rsh_0_uint32(a uint32) uint32 { return 0 >> a } //go:noinline func rsh_uint32_1(a uint32) uint32 { return a >> 1 } //go:noinline func rsh_1_uint32(a uint32) uint32 { return 1 >> a } //go:noinline func rsh_uint32_4294967295(a uint32) uint32 { return a >> 4294967295 } //go:noinline func rsh_4294967295_uint32(a uint32) uint32 { return 4294967295 >> a } //go:noinline func mod_0_uint32(a uint32) uint32 { return 0 % a } //go:noinline func mod_uint32_1(a uint32) uint32 { return a % 1 } //go:noinline func mod_1_uint32(a uint32) uint32 { return 1 % a } //go:noinline func mod_uint32_4294967295(a uint32) uint32 { return a % 4294967295 } //go:noinline func mod_4294967295_uint32(a uint32) uint32 { return 4294967295 % a } //go:noinline func and_uint32_0(a uint32) uint32 { return a & 0 } //go:noinline func and_0_uint32(a uint32) uint32 { return 0 & a } //go:noinline func and_uint32_1(a uint32) uint32 { return a & 1 } //go:noinline func and_1_uint32(a uint32) uint32 { return 1 & a } //go:noinline func and_uint32_4294967295(a uint32) uint32 { return a & 4294967295 } //go:noinline func and_4294967295_uint32(a uint32) uint32 { return 4294967295 & a } //go:noinline func or_uint32_0(a uint32) uint32 { return a | 0 } //go:noinline func or_0_uint32(a uint32) uint32 { return 0 | a } //go:noinline func or_uint32_1(a uint32) uint32 { return a | 1 } //go:noinline func or_1_uint32(a uint32) uint32 { return 1 | a } //go:noinline func or_uint32_4294967295(a uint32) uint32 { return a | 4294967295 } //go:noinline func or_4294967295_uint32(a uint32) uint32 { return 4294967295 | a } //go:noinline func xor_uint32_0(a uint32) uint32 { return a ^ 0 } //go:noinline func xor_0_uint32(a uint32) uint32 { return 0 ^ a } //go:noinline func xor_uint32_1(a uint32) uint32 { return a ^ 1 } //go:noinline func xor_1_uint32(a uint32) uint32 { return 1 ^ a } //go:noinline func xor_uint32_4294967295(a uint32) uint32 { return a ^ 4294967295 } //go:noinline func xor_4294967295_uint32(a uint32) uint32 { return 4294967295 ^ a } //go:noinline func mul_uint32_3(a uint32) uint32 { return a * 3 } //go:noinline func mul_3_uint32(a uint32) uint32 { return 3 * a } //go:noinline func mul_uint32_5(a uint32) uint32 { return a * 5 } //go:noinline func mul_5_uint32(a uint32) uint32 { return 5 * a } //go:noinline func mul_uint32_7(a uint32) uint32 { return a * 7 } //go:noinline func mul_7_uint32(a uint32) uint32 { return 7 * a } //go:noinline func mul_uint32_9(a uint32) uint32 { return a * 9 } //go:noinline func mul_9_uint32(a uint32) uint32 { return 9 * a } //go:noinline func mul_uint32_10(a uint32) uint32 { return a * 10 } //go:noinline func mul_10_uint32(a uint32) uint32 { return 10 * a } //go:noinline func mul_uint32_11(a uint32) uint32 { return a * 11 } //go:noinline func mul_11_uint32(a uint32) uint32 { return 11 * a } //go:noinline func mul_uint32_13(a uint32) uint32 { return a * 13 } //go:noinline func mul_13_uint32(a uint32) uint32 { return 13 * a } //go:noinline func mul_uint32_19(a uint32) uint32 { return a * 19 } //go:noinline func mul_19_uint32(a uint32) uint32 { return 19 * a } //go:noinline func mul_uint32_21(a uint32) uint32 { return a * 21 } //go:noinline func mul_21_uint32(a uint32) uint32 { return 21 * a } //go:noinline func mul_uint32_25(a uint32) uint32 { return a * 25 } //go:noinline func mul_25_uint32(a uint32) uint32 { return 25 * a } //go:noinline func mul_uint32_27(a uint32) uint32 { return a * 27 } //go:noinline func mul_27_uint32(a uint32) uint32 { return 27 * a } //go:noinline func mul_uint32_37(a uint32) uint32 { return a * 37 } //go:noinline func mul_37_uint32(a uint32) uint32 { return 37 * a } //go:noinline func mul_uint32_41(a uint32) uint32 { return a * 41 } //go:noinline func mul_41_uint32(a uint32) uint32 { return 41 * a } //go:noinline func mul_uint32_45(a uint32) uint32 { return a * 45 } //go:noinline func mul_45_uint32(a uint32) uint32 { return 45 * a } //go:noinline func mul_uint32_73(a uint32) uint32 { return a * 73 } //go:noinline func mul_73_uint32(a uint32) uint32 { return 73 * a } //go:noinline func mul_uint32_81(a uint32) uint32 { return a * 81 } //go:noinline func mul_81_uint32(a uint32) uint32 { return 81 * a } //go:noinline func add_int32_Neg2147483648(a int32) int32 { return a + -2147483648 } //go:noinline func add_Neg2147483648_int32(a int32) int32 { return -2147483648 + a } //go:noinline func add_int32_Neg2147483647(a int32) int32 { return a + -2147483647 } //go:noinline func add_Neg2147483647_int32(a int32) int32 { return -2147483647 + a } //go:noinline func add_int32_Neg1(a int32) int32 { return a + -1 } //go:noinline func add_Neg1_int32(a int32) int32 { return -1 + a } //go:noinline func add_int32_0(a int32) int32 { return a + 0 } //go:noinline func add_0_int32(a int32) int32 { return 0 + a } //go:noinline func add_int32_1(a int32) int32 { return a + 1 } //go:noinline func add_1_int32(a int32) int32 { return 1 + a } //go:noinline func add_int32_2147483647(a int32) int32 { return a + 2147483647 } //go:noinline func add_2147483647_int32(a int32) int32 { return 2147483647 + a } //go:noinline func sub_int32_Neg2147483648(a int32) int32 { return a - -2147483648 } //go:noinline func sub_Neg2147483648_int32(a int32) int32 { return -2147483648 - a } //go:noinline func sub_int32_Neg2147483647(a int32) int32 { return a - -2147483647 } //go:noinline func sub_Neg2147483647_int32(a int32) int32 { return -2147483647 - a } //go:noinline func sub_int32_Neg1(a int32) int32 { return a - -1 } //go:noinline func sub_Neg1_int32(a int32) int32 { return -1 - a } //go:noinline func sub_int32_0(a int32) int32 { return a - 0 } //go:noinline func sub_0_int32(a int32) int32 { return 0 - a } //go:noinline func sub_int32_1(a int32) int32 { return a - 1 } //go:noinline func sub_1_int32(a int32) int32 { return 1 - a } //go:noinline func sub_int32_2147483647(a int32) int32 { return a - 2147483647 } //go:noinline func sub_2147483647_int32(a int32) int32 { return 2147483647 - a } //go:noinline func div_int32_Neg2147483648(a int32) int32 { return a / -2147483648 } //go:noinline func div_Neg2147483648_int32(a int32) int32 { return -2147483648 / a } //go:noinline func div_int32_Neg2147483647(a int32) int32 { return a / -2147483647 } //go:noinline func div_Neg2147483647_int32(a int32) int32 { return -2147483647 / a } //go:noinline func div_int32_Neg1(a int32) int32 { return a / -1 } //go:noinline func div_Neg1_int32(a int32) int32 { return -1 / a } //go:noinline func div_0_int32(a int32) int32 { return 0 / a } //go:noinline func div_int32_1(a int32) int32 { return a / 1 } //go:noinline func div_1_int32(a int32) int32 { return 1 / a } //go:noinline func div_int32_2147483647(a int32) int32 { return a / 2147483647 } //go:noinline func div_2147483647_int32(a int32) int32 { return 2147483647 / a } //go:noinline func mul_int32_Neg2147483648(a int32) int32 { return a * -2147483648 } //go:noinline func mul_Neg2147483648_int32(a int32) int32 { return -2147483648 * a } //go:noinline func mul_int32_Neg2147483647(a int32) int32 { return a * -2147483647 } //go:noinline func mul_Neg2147483647_int32(a int32) int32 { return -2147483647 * a } //go:noinline func mul_int32_Neg1(a int32) int32 { return a * -1 } //go:noinline func mul_Neg1_int32(a int32) int32 { return -1 * a } //go:noinline func mul_int32_0(a int32) int32 { return a * 0 } //go:noinline func mul_0_int32(a int32) int32 { return 0 * a } //go:noinline func mul_int32_1(a int32) int32 { return a * 1 } //go:noinline func mul_1_int32(a int32) int32 { return 1 * a } //go:noinline func mul_int32_2147483647(a int32) int32 { return a * 2147483647 } //go:noinline func mul_2147483647_int32(a int32) int32 { return 2147483647 * a } //go:noinline func mod_int32_Neg2147483648(a int32) int32 { return a % -2147483648 } //go:noinline func mod_Neg2147483648_int32(a int32) int32 { return -2147483648 % a } //go:noinline func mod_int32_Neg2147483647(a int32) int32 { return a % -2147483647 } //go:noinline func mod_Neg2147483647_int32(a int32) int32 { return -2147483647 % a } //go:noinline func mod_int32_Neg1(a int32) int32 { return a % -1 } //go:noinline func mod_Neg1_int32(a int32) int32 { return -1 % a } //go:noinline func mod_0_int32(a int32) int32 { return 0 % a } //go:noinline func mod_int32_1(a int32) int32 { return a % 1 } //go:noinline func mod_1_int32(a int32) int32 { return 1 % a } //go:noinline func mod_int32_2147483647(a int32) int32 { return a % 2147483647 } //go:noinline func mod_2147483647_int32(a int32) int32 { return 2147483647 % a } //go:noinline func and_int32_Neg2147483648(a int32) int32 { return a & -2147483648 } //go:noinline func and_Neg2147483648_int32(a int32) int32 { return -2147483648 & a } //go:noinline func and_int32_Neg2147483647(a int32) int32 { return a & -2147483647 } //go:noinline func and_Neg2147483647_int32(a int32) int32 { return -2147483647 & a } //go:noinline func and_int32_Neg1(a int32) int32 { return a & -1 } //go:noinline func and_Neg1_int32(a int32) int32 { return -1 & a } //go:noinline func and_int32_0(a int32) int32 { return a & 0 } //go:noinline func and_0_int32(a int32) int32 { return 0 & a } //go:noinline func and_int32_1(a int32) int32 { return a & 1 } //go:noinline func and_1_int32(a int32) int32 { return 1 & a } //go:noinline func and_int32_2147483647(a int32) int32 { return a & 2147483647 } //go:noinline func and_2147483647_int32(a int32) int32 { return 2147483647 & a } //go:noinline func or_int32_Neg2147483648(a int32) int32 { return a | -2147483648 } //go:noinline func or_Neg2147483648_int32(a int32) int32 { return -2147483648 | a } //go:noinline func or_int32_Neg2147483647(a int32) int32 { return a | -2147483647 } //go:noinline func or_Neg2147483647_int32(a int32) int32 { return -2147483647 | a } //go:noinline func or_int32_Neg1(a int32) int32 { return a | -1 } //go:noinline func or_Neg1_int32(a int32) int32 { return -1 | a } //go:noinline func or_int32_0(a int32) int32 { return a | 0 } //go:noinline func or_0_int32(a int32) int32 { return 0 | a } //go:noinline func or_int32_1(a int32) int32 { return a | 1 } //go:noinline func or_1_int32(a int32) int32 { return 1 | a } //go:noinline func or_int32_2147483647(a int32) int32 { return a | 2147483647 } //go:noinline func or_2147483647_int32(a int32) int32 { return 2147483647 | a } //go:noinline func xor_int32_Neg2147483648(a int32) int32 { return a ^ -2147483648 } //go:noinline func xor_Neg2147483648_int32(a int32) int32 { return -2147483648 ^ a } //go:noinline func xor_int32_Neg2147483647(a int32) int32 { return a ^ -2147483647 } //go:noinline func xor_Neg2147483647_int32(a int32) int32 { return -2147483647 ^ a } //go:noinline func xor_int32_Neg1(a int32) int32 { return a ^ -1 } //go:noinline func xor_Neg1_int32(a int32) int32 { return -1 ^ a } //go:noinline func xor_int32_0(a int32) int32 { return a ^ 0 } //go:noinline func xor_0_int32(a int32) int32 { return 0 ^ a } //go:noinline func xor_int32_1(a int32) int32 { return a ^ 1 } //go:noinline func xor_1_int32(a int32) int32 { return 1 ^ a } //go:noinline func xor_int32_2147483647(a int32) int32 { return a ^ 2147483647 } //go:noinline func xor_2147483647_int32(a int32) int32 { return 2147483647 ^ a } //go:noinline func mul_int32_Neg9(a int32) int32 { return a * -9 } //go:noinline func mul_Neg9_int32(a int32) int32 { return -9 * a } //go:noinline func mul_int32_Neg5(a int32) int32 { return a * -5 } //go:noinline func mul_Neg5_int32(a int32) int32 { return -5 * a } //go:noinline func mul_int32_Neg3(a int32) int32 { return a * -3 } //go:noinline func mul_Neg3_int32(a int32) int32 { return -3 * a } //go:noinline func mul_int32_3(a int32) int32 { return a * 3 } //go:noinline func mul_3_int32(a int32) int32 { return 3 * a } //go:noinline func mul_int32_5(a int32) int32 { return a * 5 } //go:noinline func mul_5_int32(a int32) int32 { return 5 * a } //go:noinline func mul_int32_7(a int32) int32 { return a * 7 } //go:noinline func mul_7_int32(a int32) int32 { return 7 * a } //go:noinline func mul_int32_9(a int32) int32 { return a * 9 } //go:noinline func mul_9_int32(a int32) int32 { return 9 * a } //go:noinline func mul_int32_10(a int32) int32 { return a * 10 } //go:noinline func mul_10_int32(a int32) int32 { return 10 * a } //go:noinline func mul_int32_11(a int32) int32 { return a * 11 } //go:noinline func mul_11_int32(a int32) int32 { return 11 * a } //go:noinline func mul_int32_13(a int32) int32 { return a * 13 } //go:noinline func mul_13_int32(a int32) int32 { return 13 * a } //go:noinline func mul_int32_19(a int32) int32 { return a * 19 } //go:noinline func mul_19_int32(a int32) int32 { return 19 * a } //go:noinline func mul_int32_21(a int32) int32 { return a * 21 } //go:noinline func mul_21_int32(a int32) int32 { return 21 * a } //go:noinline func mul_int32_25(a int32) int32 { return a * 25 } //go:noinline func mul_25_int32(a int32) int32 { return 25 * a } //go:noinline func mul_int32_27(a int32) int32 { return a * 27 } //go:noinline func mul_27_int32(a int32) int32 { return 27 * a } //go:noinline func mul_int32_37(a int32) int32 { return a * 37 } //go:noinline func mul_37_int32(a int32) int32 { return 37 * a } //go:noinline func mul_int32_41(a int32) int32 { return a * 41 } //go:noinline func mul_41_int32(a int32) int32 { return 41 * a } //go:noinline func mul_int32_45(a int32) int32 { return a * 45 } //go:noinline func mul_45_int32(a int32) int32 { return 45 * a } //go:noinline func mul_int32_73(a int32) int32 { return a * 73 } //go:noinline func mul_73_int32(a int32) int32 { return 73 * a } //go:noinline func mul_int32_81(a int32) int32 { return a * 81 } //go:noinline func mul_81_int32(a int32) int32 { return 81 * a } //go:noinline func add_uint16_0(a uint16) uint16 { return a + 0 } //go:noinline func add_0_uint16(a uint16) uint16 { return 0 + a } //go:noinline func add_uint16_1(a uint16) uint16 { return a + 1 } //go:noinline func add_1_uint16(a uint16) uint16 { return 1 + a } //go:noinline func add_uint16_65535(a uint16) uint16 { return a + 65535 } //go:noinline func add_65535_uint16(a uint16) uint16 { return 65535 + a } //go:noinline func sub_uint16_0(a uint16) uint16 { return a - 0 } //go:noinline func sub_0_uint16(a uint16) uint16 { return 0 - a } //go:noinline func sub_uint16_1(a uint16) uint16 { return a - 1 } //go:noinline func sub_1_uint16(a uint16) uint16 { return 1 - a } //go:noinline func sub_uint16_65535(a uint16) uint16 { return a - 65535 } //go:noinline func sub_65535_uint16(a uint16) uint16 { return 65535 - a } //go:noinline func div_0_uint16(a uint16) uint16 { return 0 / a } //go:noinline func div_uint16_1(a uint16) uint16 { return a / 1 } //go:noinline func div_1_uint16(a uint16) uint16 { return 1 / a } //go:noinline func div_uint16_65535(a uint16) uint16 { return a / 65535 } //go:noinline func div_65535_uint16(a uint16) uint16 { return 65535 / a } //go:noinline func mul_uint16_0(a uint16) uint16 { return a * 0 } //go:noinline func mul_0_uint16(a uint16) uint16 { return 0 * a } //go:noinline func mul_uint16_1(a uint16) uint16 { return a * 1 } //go:noinline func mul_1_uint16(a uint16) uint16 { return 1 * a } //go:noinline func mul_uint16_65535(a uint16) uint16 { return a * 65535 } //go:noinline func mul_65535_uint16(a uint16) uint16 { return 65535 * a } //go:noinline func lsh_uint16_0(a uint16) uint16 { return a << 0 } //go:noinline func lsh_0_uint16(a uint16) uint16 { return 0 << a } //go:noinline func lsh_uint16_1(a uint16) uint16 { return a << 1 } //go:noinline func lsh_1_uint16(a uint16) uint16 { return 1 << a } //go:noinline func lsh_uint16_65535(a uint16) uint16 { return a << 65535 } //go:noinline func lsh_65535_uint16(a uint16) uint16 { return 65535 << a } //go:noinline func rsh_uint16_0(a uint16) uint16 { return a >> 0 } //go:noinline func rsh_0_uint16(a uint16) uint16 { return 0 >> a } //go:noinline func rsh_uint16_1(a uint16) uint16 { return a >> 1 } //go:noinline func rsh_1_uint16(a uint16) uint16 { return 1 >> a } //go:noinline func rsh_uint16_65535(a uint16) uint16 { return a >> 65535 } //go:noinline func rsh_65535_uint16(a uint16) uint16 { return 65535 >> a } //go:noinline func mod_0_uint16(a uint16) uint16 { return 0 % a } //go:noinline func mod_uint16_1(a uint16) uint16 { return a % 1 } //go:noinline func mod_1_uint16(a uint16) uint16 { return 1 % a } //go:noinline func mod_uint16_65535(a uint16) uint16 { return a % 65535 } //go:noinline func mod_65535_uint16(a uint16) uint16 { return 65535 % a } //go:noinline func and_uint16_0(a uint16) uint16 { return a & 0 } //go:noinline func and_0_uint16(a uint16) uint16 { return 0 & a } //go:noinline func and_uint16_1(a uint16) uint16 { return a & 1 } //go:noinline func and_1_uint16(a uint16) uint16 { return 1 & a } //go:noinline func and_uint16_65535(a uint16) uint16 { return a & 65535 } //go:noinline func and_65535_uint16(a uint16) uint16 { return 65535 & a } //go:noinline func or_uint16_0(a uint16) uint16 { return a | 0 } //go:noinline func or_0_uint16(a uint16) uint16 { return 0 | a } //go:noinline func or_uint16_1(a uint16) uint16 { return a | 1 } //go:noinline func or_1_uint16(a uint16) uint16 { return 1 | a } //go:noinline func or_uint16_65535(a uint16) uint16 { return a | 65535 } //go:noinline func or_65535_uint16(a uint16) uint16 { return 65535 | a } //go:noinline func xor_uint16_0(a uint16) uint16 { return a ^ 0 } //go:noinline func xor_0_uint16(a uint16) uint16 { return 0 ^ a } //go:noinline func xor_uint16_1(a uint16) uint16 { return a ^ 1 } //go:noinline func xor_1_uint16(a uint16) uint16 { return 1 ^ a } //go:noinline func xor_uint16_65535(a uint16) uint16 { return a ^ 65535 } //go:noinline func xor_65535_uint16(a uint16) uint16 { return 65535 ^ a } //go:noinline func add_int16_Neg32768(a int16) int16 { return a + -32768 } //go:noinline func add_Neg32768_int16(a int16) int16 { return -32768 + a } //go:noinline func add_int16_Neg32767(a int16) int16 { return a + -32767 } //go:noinline func add_Neg32767_int16(a int16) int16 { return -32767 + a } //go:noinline func add_int16_Neg1(a int16) int16 { return a + -1 } //go:noinline func add_Neg1_int16(a int16) int16 { return -1 + a } //go:noinline func add_int16_0(a int16) int16 { return a + 0 } //go:noinline func add_0_int16(a int16) int16 { return 0 + a } //go:noinline func add_int16_1(a int16) int16 { return a + 1 } //go:noinline func add_1_int16(a int16) int16 { return 1 + a } //go:noinline func add_int16_32766(a int16) int16 { return a + 32766 } //go:noinline func add_32766_int16(a int16) int16 { return 32766 + a } //go:noinline func add_int16_32767(a int16) int16 { return a + 32767 } //go:noinline func add_32767_int16(a int16) int16 { return 32767 + a } //go:noinline func sub_int16_Neg32768(a int16) int16 { return a - -32768 } //go:noinline func sub_Neg32768_int16(a int16) int16 { return -32768 - a } //go:noinline func sub_int16_Neg32767(a int16) int16 { return a - -32767 } //go:noinline func sub_Neg32767_int16(a int16) int16 { return -32767 - a } //go:noinline func sub_int16_Neg1(a int16) int16 { return a - -1 } //go:noinline func sub_Neg1_int16(a int16) int16 { return -1 - a } //go:noinline func sub_int16_0(a int16) int16 { return a - 0 } //go:noinline func sub_0_int16(a int16) int16 { return 0 - a } //go:noinline func sub_int16_1(a int16) int16 { return a - 1 } //go:noinline func sub_1_int16(a int16) int16 { return 1 - a } //go:noinline func sub_int16_32766(a int16) int16 { return a - 32766 } //go:noinline func sub_32766_int16(a int16) int16 { return 32766 - a } //go:noinline func sub_int16_32767(a int16) int16 { return a - 32767 } //go:noinline func sub_32767_int16(a int16) int16 { return 32767 - a } //go:noinline func div_int16_Neg32768(a int16) int16 { return a / -32768 } //go:noinline func div_Neg32768_int16(a int16) int16 { return -32768 / a } //go:noinline func div_int16_Neg32767(a int16) int16 { return a / -32767 } //go:noinline func div_Neg32767_int16(a int16) int16 { return -32767 / a } //go:noinline func div_int16_Neg1(a int16) int16 { return a / -1 } //go:noinline func div_Neg1_int16(a int16) int16 { return -1 / a } //go:noinline func div_0_int16(a int16) int16 { return 0 / a } //go:noinline func div_int16_1(a int16) int16 { return a / 1 } //go:noinline func div_1_int16(a int16) int16 { return 1 / a } //go:noinline func div_int16_32766(a int16) int16 { return a / 32766 } //go:noinline func div_32766_int16(a int16) int16 { return 32766 / a } //go:noinline func div_int16_32767(a int16) int16 { return a / 32767 } //go:noinline func div_32767_int16(a int16) int16 { return 32767 / a } //go:noinline func mul_int16_Neg32768(a int16) int16 { return a * -32768 } //go:noinline func mul_Neg32768_int16(a int16) int16 { return -32768 * a } //go:noinline func mul_int16_Neg32767(a int16) int16 { return a * -32767 } //go:noinline func mul_Neg32767_int16(a int16) int16 { return -32767 * a } //go:noinline func mul_int16_Neg1(a int16) int16 { return a * -1 } //go:noinline func mul_Neg1_int16(a int16) int16 { return -1 * a } //go:noinline func mul_int16_0(a int16) int16 { return a * 0 } //go:noinline func mul_0_int16(a int16) int16 { return 0 * a } //go:noinline func mul_int16_1(a int16) int16 { return a * 1 } //go:noinline func mul_1_int16(a int16) int16 { return 1 * a } //go:noinline func mul_int16_32766(a int16) int16 { return a * 32766 } //go:noinline func mul_32766_int16(a int16) int16 { return 32766 * a } //go:noinline func mul_int16_32767(a int16) int16 { return a * 32767 } //go:noinline func mul_32767_int16(a int16) int16 { return 32767 * a } //go:noinline func mod_int16_Neg32768(a int16) int16 { return a % -32768 } //go:noinline func mod_Neg32768_int16(a int16) int16 { return -32768 % a } //go:noinline func mod_int16_Neg32767(a int16) int16 { return a % -32767 } //go:noinline func mod_Neg32767_int16(a int16) int16 { return -32767 % a } //go:noinline func mod_int16_Neg1(a int16) int16 { return a % -1 } //go:noinline func mod_Neg1_int16(a int16) int16 { return -1 % a } //go:noinline func mod_0_int16(a int16) int16 { return 0 % a } //go:noinline func mod_int16_1(a int16) int16 { return a % 1 } //go:noinline func mod_1_int16(a int16) int16 { return 1 % a } //go:noinline func mod_int16_32766(a int16) int16 { return a % 32766 } //go:noinline func mod_32766_int16(a int16) int16 { return 32766 % a } //go:noinline func mod_int16_32767(a int16) int16 { return a % 32767 } //go:noinline func mod_32767_int16(a int16) int16 { return 32767 % a } //go:noinline func and_int16_Neg32768(a int16) int16 { return a & -32768 } //go:noinline func and_Neg32768_int16(a int16) int16 { return -32768 & a } //go:noinline func and_int16_Neg32767(a int16) int16 { return a & -32767 } //go:noinline func and_Neg32767_int16(a int16) int16 { return -32767 & a } //go:noinline func and_int16_Neg1(a int16) int16 { return a & -1 } //go:noinline func and_Neg1_int16(a int16) int16 { return -1 & a } //go:noinline func and_int16_0(a int16) int16 { return a & 0 } //go:noinline func and_0_int16(a int16) int16 { return 0 & a } //go:noinline func and_int16_1(a int16) int16 { return a & 1 } //go:noinline func and_1_int16(a int16) int16 { return 1 & a } //go:noinline func and_int16_32766(a int16) int16 { return a & 32766 } //go:noinline func and_32766_int16(a int16) int16 { return 32766 & a } //go:noinline func and_int16_32767(a int16) int16 { return a & 32767 } //go:noinline func and_32767_int16(a int16) int16 { return 32767 & a } //go:noinline func or_int16_Neg32768(a int16) int16 { return a | -32768 } //go:noinline func or_Neg32768_int16(a int16) int16 { return -32768 | a } //go:noinline func or_int16_Neg32767(a int16) int16 { return a | -32767 } //go:noinline func or_Neg32767_int16(a int16) int16 { return -32767 | a } //go:noinline func or_int16_Neg1(a int16) int16 { return a | -1 } //go:noinline func or_Neg1_int16(a int16) int16 { return -1 | a } //go:noinline func or_int16_0(a int16) int16 { return a | 0 } //go:noinline func or_0_int16(a int16) int16 { return 0 | a } //go:noinline func or_int16_1(a int16) int16 { return a | 1 } //go:noinline func or_1_int16(a int16) int16 { return 1 | a } //go:noinline func or_int16_32766(a int16) int16 { return a | 32766 } //go:noinline func or_32766_int16(a int16) int16 { return 32766 | a } //go:noinline func or_int16_32767(a int16) int16 { return a | 32767 } //go:noinline func or_32767_int16(a int16) int16 { return 32767 | a } //go:noinline func xor_int16_Neg32768(a int16) int16 { return a ^ -32768 } //go:noinline func xor_Neg32768_int16(a int16) int16 { return -32768 ^ a } //go:noinline func xor_int16_Neg32767(a int16) int16 { return a ^ -32767 } //go:noinline func xor_Neg32767_int16(a int16) int16 { return -32767 ^ a } //go:noinline func xor_int16_Neg1(a int16) int16 { return a ^ -1 } //go:noinline func xor_Neg1_int16(a int16) int16 { return -1 ^ a } //go:noinline func xor_int16_0(a int16) int16 { return a ^ 0 } //go:noinline func xor_0_int16(a int16) int16 { return 0 ^ a } //go:noinline func xor_int16_1(a int16) int16 { return a ^ 1 } //go:noinline func xor_1_int16(a int16) int16 { return 1 ^ a } //go:noinline func xor_int16_32766(a int16) int16 { return a ^ 32766 } //go:noinline func xor_32766_int16(a int16) int16 { return 32766 ^ a } //go:noinline func xor_int16_32767(a int16) int16 { return a ^ 32767 } //go:noinline func xor_32767_int16(a int16) int16 { return 32767 ^ a } //go:noinline func add_uint8_0(a uint8) uint8 { return a + 0 } //go:noinline func add_0_uint8(a uint8) uint8 { return 0 + a } //go:noinline func add_uint8_1(a uint8) uint8 { return a + 1 } //go:noinline func add_1_uint8(a uint8) uint8 { return 1 + a } //go:noinline func add_uint8_255(a uint8) uint8 { return a + 255 } //go:noinline func add_255_uint8(a uint8) uint8 { return 255 + a } //go:noinline func sub_uint8_0(a uint8) uint8 { return a - 0 } //go:noinline func sub_0_uint8(a uint8) uint8 { return 0 - a } //go:noinline func sub_uint8_1(a uint8) uint8 { return a - 1 } //go:noinline func sub_1_uint8(a uint8) uint8 { return 1 - a } //go:noinline func sub_uint8_255(a uint8) uint8 { return a - 255 } //go:noinline func sub_255_uint8(a uint8) uint8 { return 255 - a } //go:noinline func div_0_uint8(a uint8) uint8 { return 0 / a } //go:noinline func div_uint8_1(a uint8) uint8 { return a / 1 } //go:noinline func div_1_uint8(a uint8) uint8 { return 1 / a } //go:noinline func div_uint8_255(a uint8) uint8 { return a / 255 } //go:noinline func div_255_uint8(a uint8) uint8 { return 255 / a } //go:noinline func mul_uint8_0(a uint8) uint8 { return a * 0 } //go:noinline func mul_0_uint8(a uint8) uint8 { return 0 * a } //go:noinline func mul_uint8_1(a uint8) uint8 { return a * 1 } //go:noinline func mul_1_uint8(a uint8) uint8 { return 1 * a } //go:noinline func mul_uint8_255(a uint8) uint8 { return a * 255 } //go:noinline func mul_255_uint8(a uint8) uint8 { return 255 * a } //go:noinline func lsh_uint8_0(a uint8) uint8 { return a << 0 } //go:noinline func lsh_0_uint8(a uint8) uint8 { return 0 << a } //go:noinline func lsh_uint8_1(a uint8) uint8 { return a << 1 } //go:noinline func lsh_1_uint8(a uint8) uint8 { return 1 << a } //go:noinline func lsh_uint8_255(a uint8) uint8 { return a << 255 } //go:noinline func lsh_255_uint8(a uint8) uint8 { return 255 << a } //go:noinline func rsh_uint8_0(a uint8) uint8 { return a >> 0 } //go:noinline func rsh_0_uint8(a uint8) uint8 { return 0 >> a } //go:noinline func rsh_uint8_1(a uint8) uint8 { return a >> 1 } //go:noinline func rsh_1_uint8(a uint8) uint8 { return 1 >> a } //go:noinline func rsh_uint8_255(a uint8) uint8 { return a >> 255 } //go:noinline func rsh_255_uint8(a uint8) uint8 { return 255 >> a } //go:noinline func mod_0_uint8(a uint8) uint8 { return 0 % a } //go:noinline func mod_uint8_1(a uint8) uint8 { return a % 1 } //go:noinline func mod_1_uint8(a uint8) uint8 { return 1 % a } //go:noinline func mod_uint8_255(a uint8) uint8 { return a % 255 } //go:noinline func mod_255_uint8(a uint8) uint8 { return 255 % a } //go:noinline func and_uint8_0(a uint8) uint8 { return a & 0 } //go:noinline func and_0_uint8(a uint8) uint8 { return 0 & a } //go:noinline func and_uint8_1(a uint8) uint8 { return a & 1 } //go:noinline func and_1_uint8(a uint8) uint8 { return 1 & a } //go:noinline func and_uint8_255(a uint8) uint8 { return a & 255 } //go:noinline func and_255_uint8(a uint8) uint8 { return 255 & a } //go:noinline func or_uint8_0(a uint8) uint8 { return a | 0 } //go:noinline func or_0_uint8(a uint8) uint8 { return 0 | a } //go:noinline func or_uint8_1(a uint8) uint8 { return a | 1 } //go:noinline func or_1_uint8(a uint8) uint8 { return 1 | a } //go:noinline func or_uint8_255(a uint8) uint8 { return a | 255 } //go:noinline func or_255_uint8(a uint8) uint8 { return 255 | a } //go:noinline func xor_uint8_0(a uint8) uint8 { return a ^ 0 } //go:noinline func xor_0_uint8(a uint8) uint8 { return 0 ^ a } //go:noinline func xor_uint8_1(a uint8) uint8 { return a ^ 1 } //go:noinline func xor_1_uint8(a uint8) uint8 { return 1 ^ a } //go:noinline func xor_uint8_255(a uint8) uint8 { return a ^ 255 } //go:noinline func xor_255_uint8(a uint8) uint8 { return 255 ^ a } //go:noinline func add_int8_Neg128(a int8) int8 { return a + -128 } //go:noinline func add_Neg128_int8(a int8) int8 { return -128 + a } //go:noinline func add_int8_Neg127(a int8) int8 { return a + -127 } //go:noinline func add_Neg127_int8(a int8) int8 { return -127 + a } //go:noinline func add_int8_Neg1(a int8) int8 { return a + -1 } //go:noinline func add_Neg1_int8(a int8) int8 { return -1 + a } //go:noinline func add_int8_0(a int8) int8 { return a + 0 } //go:noinline func add_0_int8(a int8) int8 { return 0 + a } //go:noinline func add_int8_1(a int8) int8 { return a + 1 } //go:noinline func add_1_int8(a int8) int8 { return 1 + a } //go:noinline func add_int8_126(a int8) int8 { return a + 126 } //go:noinline func add_126_int8(a int8) int8 { return 126 + a } //go:noinline func add_int8_127(a int8) int8 { return a + 127 } //go:noinline func add_127_int8(a int8) int8 { return 127 + a } //go:noinline func sub_int8_Neg128(a int8) int8 { return a - -128 } //go:noinline func sub_Neg128_int8(a int8) int8 { return -128 - a } //go:noinline func sub_int8_Neg127(a int8) int8 { return a - -127 } //go:noinline func sub_Neg127_int8(a int8) int8 { return -127 - a } //go:noinline func sub_int8_Neg1(a int8) int8 { return a - -1 } //go:noinline func sub_Neg1_int8(a int8) int8 { return -1 - a } //go:noinline func sub_int8_0(a int8) int8 { return a - 0 } //go:noinline func sub_0_int8(a int8) int8 { return 0 - a } //go:noinline func sub_int8_1(a int8) int8 { return a - 1 } //go:noinline func sub_1_int8(a int8) int8 { return 1 - a } //go:noinline func sub_int8_126(a int8) int8 { return a - 126 } //go:noinline func sub_126_int8(a int8) int8 { return 126 - a } //go:noinline func sub_int8_127(a int8) int8 { return a - 127 } //go:noinline func sub_127_int8(a int8) int8 { return 127 - a } //go:noinline func div_int8_Neg128(a int8) int8 { return a / -128 } //go:noinline func div_Neg128_int8(a int8) int8 { return -128 / a } //go:noinline func div_int8_Neg127(a int8) int8 { return a / -127 } //go:noinline func div_Neg127_int8(a int8) int8 { return -127 / a } //go:noinline func div_int8_Neg1(a int8) int8 { return a / -1 } //go:noinline func div_Neg1_int8(a int8) int8 { return -1 / a } //go:noinline func div_0_int8(a int8) int8 { return 0 / a } //go:noinline func div_int8_1(a int8) int8 { return a / 1 } //go:noinline func div_1_int8(a int8) int8 { return 1 / a } //go:noinline func div_int8_126(a int8) int8 { return a / 126 } //go:noinline func div_126_int8(a int8) int8 { return 126 / a } //go:noinline func div_int8_127(a int8) int8 { return a / 127 } //go:noinline func div_127_int8(a int8) int8 { return 127 / a } //go:noinline func mul_int8_Neg128(a int8) int8 { return a * -128 } //go:noinline func mul_Neg128_int8(a int8) int8 { return -128 * a } //go:noinline func mul_int8_Neg127(a int8) int8 { return a * -127 } //go:noinline func mul_Neg127_int8(a int8) int8 { return -127 * a } //go:noinline func mul_int8_Neg1(a int8) int8 { return a * -1 } //go:noinline func mul_Neg1_int8(a int8) int8 { return -1 * a } //go:noinline func mul_int8_0(a int8) int8 { return a * 0 } //go:noinline func mul_0_int8(a int8) int8 { return 0 * a } //go:noinline func mul_int8_1(a int8) int8 { return a * 1 } //go:noinline func mul_1_int8(a int8) int8 { return 1 * a } //go:noinline func mul_int8_126(a int8) int8 { return a * 126 } //go:noinline func mul_126_int8(a int8) int8 { return 126 * a } //go:noinline func mul_int8_127(a int8) int8 { return a * 127 } //go:noinline func mul_127_int8(a int8) int8 { return 127 * a } //go:noinline func mod_int8_Neg128(a int8) int8 { return a % -128 } //go:noinline func mod_Neg128_int8(a int8) int8 { return -128 % a } //go:noinline func mod_int8_Neg127(a int8) int8 { return a % -127 } //go:noinline func mod_Neg127_int8(a int8) int8 { return -127 % a } //go:noinline func mod_int8_Neg1(a int8) int8 { return a % -1 } //go:noinline func mod_Neg1_int8(a int8) int8 { return -1 % a } //go:noinline func mod_0_int8(a int8) int8 { return 0 % a } //go:noinline func mod_int8_1(a int8) int8 { return a % 1 } //go:noinline func mod_1_int8(a int8) int8 { return 1 % a } //go:noinline func mod_int8_126(a int8) int8 { return a % 126 } //go:noinline func mod_126_int8(a int8) int8 { return 126 % a } //go:noinline func mod_int8_127(a int8) int8 { return a % 127 } //go:noinline func mod_127_int8(a int8) int8 { return 127 % a } //go:noinline func and_int8_Neg128(a int8) int8 { return a & -128 } //go:noinline func and_Neg128_int8(a int8) int8 { return -128 & a } //go:noinline func and_int8_Neg127(a int8) int8 { return a & -127 } //go:noinline func and_Neg127_int8(a int8) int8 { return -127 & a } //go:noinline func and_int8_Neg1(a int8) int8 { return a & -1 } //go:noinline func and_Neg1_int8(a int8) int8 { return -1 & a } //go:noinline func and_int8_0(a int8) int8 { return a & 0 } //go:noinline func and_0_int8(a int8) int8 { return 0 & a } //go:noinline func and_int8_1(a int8) int8 { return a & 1 } //go:noinline func and_1_int8(a int8) int8 { return 1 & a } //go:noinline func and_int8_126(a int8) int8 { return a & 126 } //go:noinline func and_126_int8(a int8) int8 { return 126 & a } //go:noinline func and_int8_127(a int8) int8 { return a & 127 } //go:noinline func and_127_int8(a int8) int8 { return 127 & a } //go:noinline func or_int8_Neg128(a int8) int8 { return a | -128 } //go:noinline func or_Neg128_int8(a int8) int8 { return -128 | a } //go:noinline func or_int8_Neg127(a int8) int8 { return a | -127 } //go:noinline func or_Neg127_int8(a int8) int8 { return -127 | a } //go:noinline func or_int8_Neg1(a int8) int8 { return a | -1 } //go:noinline func or_Neg1_int8(a int8) int8 { return -1 | a } //go:noinline func or_int8_0(a int8) int8 { return a | 0 } //go:noinline func or_0_int8(a int8) int8 { return 0 | a } //go:noinline func or_int8_1(a int8) int8 { return a | 1 } //go:noinline func or_1_int8(a int8) int8 { return 1 | a } //go:noinline func or_int8_126(a int8) int8 { return a | 126 } //go:noinline func or_126_int8(a int8) int8 { return 126 | a } //go:noinline func or_int8_127(a int8) int8 { return a | 127 } //go:noinline func or_127_int8(a int8) int8 { return 127 | a } //go:noinline func xor_int8_Neg128(a int8) int8 { return a ^ -128 } //go:noinline func xor_Neg128_int8(a int8) int8 { return -128 ^ a } //go:noinline func xor_int8_Neg127(a int8) int8 { return a ^ -127 } //go:noinline func xor_Neg127_int8(a int8) int8 { return -127 ^ a } //go:noinline func xor_int8_Neg1(a int8) int8 { return a ^ -1 } //go:noinline func xor_Neg1_int8(a int8) int8 { return -1 ^ a } //go:noinline func xor_int8_0(a int8) int8 { return a ^ 0 } //go:noinline func xor_0_int8(a int8) int8 { return 0 ^ a } //go:noinline func xor_int8_1(a int8) int8 { return a ^ 1 } //go:noinline func xor_1_int8(a int8) int8 { return 1 ^ a } //go:noinline func xor_int8_126(a int8) int8 { return a ^ 126 } //go:noinline func xor_126_int8(a int8) int8 { return 126 ^ a } //go:noinline func xor_int8_127(a int8) int8 { return a ^ 127 } //go:noinline func xor_127_int8(a int8) int8 { return 127 ^ a } type test_uint64 struct { fn func(uint64) uint64 fnname string in uint64 want uint64 } var tests_uint64 = []test_uint64{ test_uint64{fn: add_0_uint64, fnname: "add_0_uint64", in: 0, want: 0}, test_uint64{fn: add_uint64_0, fnname: "add_uint64_0", in: 0, want: 0}, test_uint64{fn: add_0_uint64, fnname: "add_0_uint64", in: 1, want: 1}, test_uint64{fn: add_uint64_0, fnname: "add_uint64_0", in: 1, want: 1}, test_uint64{fn: add_0_uint64, fnname: "add_0_uint64", in: 4294967296, want: 4294967296}, test_uint64{fn: add_uint64_0, fnname: "add_uint64_0", in: 4294967296, want: 4294967296}, test_uint64{fn: add_0_uint64, fnname: "add_0_uint64", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: add_uint64_0, fnname: "add_uint64_0", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: add_0_uint64, fnname: "add_0_uint64", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: add_uint64_0, fnname: "add_uint64_0", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: add_1_uint64, fnname: "add_1_uint64", in: 0, want: 1}, test_uint64{fn: add_uint64_1, fnname: "add_uint64_1", in: 0, want: 1}, test_uint64{fn: add_1_uint64, fnname: "add_1_uint64", in: 1, want: 2}, test_uint64{fn: add_uint64_1, fnname: "add_uint64_1", in: 1, want: 2}, test_uint64{fn: add_1_uint64, fnname: "add_1_uint64", in: 4294967296, want: 4294967297}, test_uint64{fn: add_uint64_1, fnname: "add_uint64_1", in: 4294967296, want: 4294967297}, test_uint64{fn: add_1_uint64, fnname: "add_1_uint64", in: 9223372036854775808, want: 9223372036854775809}, test_uint64{fn: add_uint64_1, fnname: "add_uint64_1", in: 9223372036854775808, want: 9223372036854775809}, test_uint64{fn: add_1_uint64, fnname: "add_1_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: add_uint64_1, fnname: "add_uint64_1", in: 18446744073709551615, want: 0}, test_uint64{fn: add_4294967296_uint64, fnname: "add_4294967296_uint64", in: 0, want: 4294967296}, test_uint64{fn: add_uint64_4294967296, fnname: "add_uint64_4294967296", in: 0, want: 4294967296}, test_uint64{fn: add_4294967296_uint64, fnname: "add_4294967296_uint64", in: 1, want: 4294967297}, test_uint64{fn: add_uint64_4294967296, fnname: "add_uint64_4294967296", in: 1, want: 4294967297}, test_uint64{fn: add_4294967296_uint64, fnname: "add_4294967296_uint64", in: 4294967296, want: 8589934592}, test_uint64{fn: add_uint64_4294967296, fnname: "add_uint64_4294967296", in: 4294967296, want: 8589934592}, test_uint64{fn: add_4294967296_uint64, fnname: "add_4294967296_uint64", in: 9223372036854775808, want: 9223372041149743104}, test_uint64{fn: add_uint64_4294967296, fnname: "add_uint64_4294967296", in: 9223372036854775808, want: 9223372041149743104}, test_uint64{fn: add_4294967296_uint64, fnname: "add_4294967296_uint64", in: 18446744073709551615, want: 4294967295}, test_uint64{fn: add_uint64_4294967296, fnname: "add_uint64_4294967296", in: 18446744073709551615, want: 4294967295}, test_uint64{fn: add_9223372036854775808_uint64, fnname: "add_9223372036854775808_uint64", in: 0, want: 9223372036854775808}, test_uint64{fn: add_uint64_9223372036854775808, fnname: "add_uint64_9223372036854775808", in: 0, want: 9223372036854775808}, test_uint64{fn: add_9223372036854775808_uint64, fnname: "add_9223372036854775808_uint64", in: 1, want: 9223372036854775809}, test_uint64{fn: add_uint64_9223372036854775808, fnname: "add_uint64_9223372036854775808", in: 1, want: 9223372036854775809}, test_uint64{fn: add_9223372036854775808_uint64, fnname: "add_9223372036854775808_uint64", in: 4294967296, want: 9223372041149743104}, test_uint64{fn: add_uint64_9223372036854775808, fnname: "add_uint64_9223372036854775808", in: 4294967296, want: 9223372041149743104}, test_uint64{fn: add_9223372036854775808_uint64, fnname: "add_9223372036854775808_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: add_uint64_9223372036854775808, fnname: "add_uint64_9223372036854775808", in: 9223372036854775808, want: 0}, test_uint64{fn: add_9223372036854775808_uint64, fnname: "add_9223372036854775808_uint64", in: 18446744073709551615, want: 9223372036854775807}, test_uint64{fn: add_uint64_9223372036854775808, fnname: "add_uint64_9223372036854775808", in: 18446744073709551615, want: 9223372036854775807}, test_uint64{fn: add_18446744073709551615_uint64, fnname: "add_18446744073709551615_uint64", in: 0, want: 18446744073709551615}, test_uint64{fn: add_uint64_18446744073709551615, fnname: "add_uint64_18446744073709551615", in: 0, want: 18446744073709551615}, test_uint64{fn: add_18446744073709551615_uint64, fnname: "add_18446744073709551615_uint64", in: 1, want: 0}, test_uint64{fn: add_uint64_18446744073709551615, fnname: "add_uint64_18446744073709551615", in: 1, want: 0}, test_uint64{fn: add_18446744073709551615_uint64, fnname: "add_18446744073709551615_uint64", in: 4294967296, want: 4294967295}, test_uint64{fn: add_uint64_18446744073709551615, fnname: "add_uint64_18446744073709551615", in: 4294967296, want: 4294967295}, test_uint64{fn: add_18446744073709551615_uint64, fnname: "add_18446744073709551615_uint64", in: 9223372036854775808, want: 9223372036854775807}, test_uint64{fn: add_uint64_18446744073709551615, fnname: "add_uint64_18446744073709551615", in: 9223372036854775808, want: 9223372036854775807}, test_uint64{fn: add_18446744073709551615_uint64, fnname: "add_18446744073709551615_uint64", in: 18446744073709551615, want: 18446744073709551614}, test_uint64{fn: add_uint64_18446744073709551615, fnname: "add_uint64_18446744073709551615", in: 18446744073709551615, want: 18446744073709551614}, test_uint64{fn: sub_0_uint64, fnname: "sub_0_uint64", in: 0, want: 0}, test_uint64{fn: sub_uint64_0, fnname: "sub_uint64_0", in: 0, want: 0}, test_uint64{fn: sub_0_uint64, fnname: "sub_0_uint64", in: 1, want: 18446744073709551615}, test_uint64{fn: sub_uint64_0, fnname: "sub_uint64_0", in: 1, want: 1}, test_uint64{fn: sub_0_uint64, fnname: "sub_0_uint64", in: 4294967296, want: 18446744069414584320}, test_uint64{fn: sub_uint64_0, fnname: "sub_uint64_0", in: 4294967296, want: 4294967296}, test_uint64{fn: sub_0_uint64, fnname: "sub_0_uint64", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: sub_uint64_0, fnname: "sub_uint64_0", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: sub_0_uint64, fnname: "sub_0_uint64", in: 18446744073709551615, want: 1}, test_uint64{fn: sub_uint64_0, fnname: "sub_uint64_0", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: sub_1_uint64, fnname: "sub_1_uint64", in: 0, want: 1}, test_uint64{fn: sub_uint64_1, fnname: "sub_uint64_1", in: 0, want: 18446744073709551615}, test_uint64{fn: sub_1_uint64, fnname: "sub_1_uint64", in: 1, want: 0}, test_uint64{fn: sub_uint64_1, fnname: "sub_uint64_1", in: 1, want: 0}, test_uint64{fn: sub_1_uint64, fnname: "sub_1_uint64", in: 4294967296, want: 18446744069414584321}, test_uint64{fn: sub_uint64_1, fnname: "sub_uint64_1", in: 4294967296, want: 4294967295}, test_uint64{fn: sub_1_uint64, fnname: "sub_1_uint64", in: 9223372036854775808, want: 9223372036854775809}, test_uint64{fn: sub_uint64_1, fnname: "sub_uint64_1", in: 9223372036854775808, want: 9223372036854775807}, test_uint64{fn: sub_1_uint64, fnname: "sub_1_uint64", in: 18446744073709551615, want: 2}, test_uint64{fn: sub_uint64_1, fnname: "sub_uint64_1", in: 18446744073709551615, want: 18446744073709551614}, test_uint64{fn: sub_4294967296_uint64, fnname: "sub_4294967296_uint64", in: 0, want: 4294967296}, test_uint64{fn: sub_uint64_4294967296, fnname: "sub_uint64_4294967296", in: 0, want: 18446744069414584320}, test_uint64{fn: sub_4294967296_uint64, fnname: "sub_4294967296_uint64", in: 1, want: 4294967295}, test_uint64{fn: sub_uint64_4294967296, fnname: "sub_uint64_4294967296", in: 1, want: 18446744069414584321}, test_uint64{fn: sub_4294967296_uint64, fnname: "sub_4294967296_uint64", in: 4294967296, want: 0}, test_uint64{fn: sub_uint64_4294967296, fnname: "sub_uint64_4294967296", in: 4294967296, want: 0}, test_uint64{fn: sub_4294967296_uint64, fnname: "sub_4294967296_uint64", in: 9223372036854775808, want: 9223372041149743104}, test_uint64{fn: sub_uint64_4294967296, fnname: "sub_uint64_4294967296", in: 9223372036854775808, want: 9223372032559808512}, test_uint64{fn: sub_4294967296_uint64, fnname: "sub_4294967296_uint64", in: 18446744073709551615, want: 4294967297}, test_uint64{fn: sub_uint64_4294967296, fnname: "sub_uint64_4294967296", in: 18446744073709551615, want: 18446744069414584319}, test_uint64{fn: sub_9223372036854775808_uint64, fnname: "sub_9223372036854775808_uint64", in: 0, want: 9223372036854775808}, test_uint64{fn: sub_uint64_9223372036854775808, fnname: "sub_uint64_9223372036854775808", in: 0, want: 9223372036854775808}, test_uint64{fn: sub_9223372036854775808_uint64, fnname: "sub_9223372036854775808_uint64", in: 1, want: 9223372036854775807}, test_uint64{fn: sub_uint64_9223372036854775808, fnname: "sub_uint64_9223372036854775808", in: 1, want: 9223372036854775809}, test_uint64{fn: sub_9223372036854775808_uint64, fnname: "sub_9223372036854775808_uint64", in: 4294967296, want: 9223372032559808512}, test_uint64{fn: sub_uint64_9223372036854775808, fnname: "sub_uint64_9223372036854775808", in: 4294967296, want: 9223372041149743104}, test_uint64{fn: sub_9223372036854775808_uint64, fnname: "sub_9223372036854775808_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: sub_uint64_9223372036854775808, fnname: "sub_uint64_9223372036854775808", in: 9223372036854775808, want: 0}, test_uint64{fn: sub_9223372036854775808_uint64, fnname: "sub_9223372036854775808_uint64", in: 18446744073709551615, want: 9223372036854775809}, test_uint64{fn: sub_uint64_9223372036854775808, fnname: "sub_uint64_9223372036854775808", in: 18446744073709551615, want: 9223372036854775807}, test_uint64{fn: sub_18446744073709551615_uint64, fnname: "sub_18446744073709551615_uint64", in: 0, want: 18446744073709551615}, test_uint64{fn: sub_uint64_18446744073709551615, fnname: "sub_uint64_18446744073709551615", in: 0, want: 1}, test_uint64{fn: sub_18446744073709551615_uint64, fnname: "sub_18446744073709551615_uint64", in: 1, want: 18446744073709551614}, test_uint64{fn: sub_uint64_18446744073709551615, fnname: "sub_uint64_18446744073709551615", in: 1, want: 2}, test_uint64{fn: sub_18446744073709551615_uint64, fnname: "sub_18446744073709551615_uint64", in: 4294967296, want: 18446744069414584319}, test_uint64{fn: sub_uint64_18446744073709551615, fnname: "sub_uint64_18446744073709551615", in: 4294967296, want: 4294967297}, test_uint64{fn: sub_18446744073709551615_uint64, fnname: "sub_18446744073709551615_uint64", in: 9223372036854775808, want: 9223372036854775807}, test_uint64{fn: sub_uint64_18446744073709551615, fnname: "sub_uint64_18446744073709551615", in: 9223372036854775808, want: 9223372036854775809}, test_uint64{fn: sub_18446744073709551615_uint64, fnname: "sub_18446744073709551615_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: sub_uint64_18446744073709551615, fnname: "sub_uint64_18446744073709551615", in: 18446744073709551615, want: 0}, test_uint64{fn: div_0_uint64, fnname: "div_0_uint64", in: 1, want: 0}, test_uint64{fn: div_0_uint64, fnname: "div_0_uint64", in: 4294967296, want: 0}, test_uint64{fn: div_0_uint64, fnname: "div_0_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: div_0_uint64, fnname: "div_0_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: div_uint64_1, fnname: "div_uint64_1", in: 0, want: 0}, test_uint64{fn: div_1_uint64, fnname: "div_1_uint64", in: 1, want: 1}, test_uint64{fn: div_uint64_1, fnname: "div_uint64_1", in: 1, want: 1}, test_uint64{fn: div_1_uint64, fnname: "div_1_uint64", in: 4294967296, want: 0}, test_uint64{fn: div_uint64_1, fnname: "div_uint64_1", in: 4294967296, want: 4294967296}, test_uint64{fn: div_1_uint64, fnname: "div_1_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: div_uint64_1, fnname: "div_uint64_1", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: div_1_uint64, fnname: "div_1_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: div_uint64_1, fnname: "div_uint64_1", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: div_uint64_4294967296, fnname: "div_uint64_4294967296", in: 0, want: 0}, test_uint64{fn: div_4294967296_uint64, fnname: "div_4294967296_uint64", in: 1, want: 4294967296}, test_uint64{fn: div_uint64_4294967296, fnname: "div_uint64_4294967296", in: 1, want: 0}, test_uint64{fn: div_4294967296_uint64, fnname: "div_4294967296_uint64", in: 4294967296, want: 1}, test_uint64{fn: div_uint64_4294967296, fnname: "div_uint64_4294967296", in: 4294967296, want: 1}, test_uint64{fn: div_4294967296_uint64, fnname: "div_4294967296_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: div_uint64_4294967296, fnname: "div_uint64_4294967296", in: 9223372036854775808, want: 2147483648}, test_uint64{fn: div_4294967296_uint64, fnname: "div_4294967296_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: div_uint64_4294967296, fnname: "div_uint64_4294967296", in: 18446744073709551615, want: 4294967295}, test_uint64{fn: div_uint64_9223372036854775808, fnname: "div_uint64_9223372036854775808", in: 0, want: 0}, test_uint64{fn: div_9223372036854775808_uint64, fnname: "div_9223372036854775808_uint64", in: 1, want: 9223372036854775808}, test_uint64{fn: div_uint64_9223372036854775808, fnname: "div_uint64_9223372036854775808", in: 1, want: 0}, test_uint64{fn: div_9223372036854775808_uint64, fnname: "div_9223372036854775808_uint64", in: 4294967296, want: 2147483648}, test_uint64{fn: div_uint64_9223372036854775808, fnname: "div_uint64_9223372036854775808", in: 4294967296, want: 0}, test_uint64{fn: div_9223372036854775808_uint64, fnname: "div_9223372036854775808_uint64", in: 9223372036854775808, want: 1}, test_uint64{fn: div_uint64_9223372036854775808, fnname: "div_uint64_9223372036854775808", in: 9223372036854775808, want: 1}, test_uint64{fn: div_9223372036854775808_uint64, fnname: "div_9223372036854775808_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: div_uint64_9223372036854775808, fnname: "div_uint64_9223372036854775808", in: 18446744073709551615, want: 1}, test_uint64{fn: div_uint64_18446744073709551615, fnname: "div_uint64_18446744073709551615", in: 0, want: 0}, test_uint64{fn: div_18446744073709551615_uint64, fnname: "div_18446744073709551615_uint64", in: 1, want: 18446744073709551615}, test_uint64{fn: div_uint64_18446744073709551615, fnname: "div_uint64_18446744073709551615", in: 1, want: 0}, test_uint64{fn: div_18446744073709551615_uint64, fnname: "div_18446744073709551615_uint64", in: 4294967296, want: 4294967295}, test_uint64{fn: div_uint64_18446744073709551615, fnname: "div_uint64_18446744073709551615", in: 4294967296, want: 0}, test_uint64{fn: div_18446744073709551615_uint64, fnname: "div_18446744073709551615_uint64", in: 9223372036854775808, want: 1}, test_uint64{fn: div_uint64_18446744073709551615, fnname: "div_uint64_18446744073709551615", in: 9223372036854775808, want: 0}, test_uint64{fn: div_18446744073709551615_uint64, fnname: "div_18446744073709551615_uint64", in: 18446744073709551615, want: 1}, test_uint64{fn: div_uint64_18446744073709551615, fnname: "div_uint64_18446744073709551615", in: 18446744073709551615, want: 1}, test_uint64{fn: mul_0_uint64, fnname: "mul_0_uint64", in: 0, want: 0}, test_uint64{fn: mul_uint64_0, fnname: "mul_uint64_0", in: 0, want: 0}, test_uint64{fn: mul_0_uint64, fnname: "mul_0_uint64", in: 1, want: 0}, test_uint64{fn: mul_uint64_0, fnname: "mul_uint64_0", in: 1, want: 0}, test_uint64{fn: mul_0_uint64, fnname: "mul_0_uint64", in: 4294967296, want: 0}, test_uint64{fn: mul_uint64_0, fnname: "mul_uint64_0", in: 4294967296, want: 0}, test_uint64{fn: mul_0_uint64, fnname: "mul_0_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: mul_uint64_0, fnname: "mul_uint64_0", in: 9223372036854775808, want: 0}, test_uint64{fn: mul_0_uint64, fnname: "mul_0_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: mul_uint64_0, fnname: "mul_uint64_0", in: 18446744073709551615, want: 0}, test_uint64{fn: mul_1_uint64, fnname: "mul_1_uint64", in: 0, want: 0}, test_uint64{fn: mul_uint64_1, fnname: "mul_uint64_1", in: 0, want: 0}, test_uint64{fn: mul_1_uint64, fnname: "mul_1_uint64", in: 1, want: 1}, test_uint64{fn: mul_uint64_1, fnname: "mul_uint64_1", in: 1, want: 1}, test_uint64{fn: mul_1_uint64, fnname: "mul_1_uint64", in: 4294967296, want: 4294967296}, test_uint64{fn: mul_uint64_1, fnname: "mul_uint64_1", in: 4294967296, want: 4294967296}, test_uint64{fn: mul_1_uint64, fnname: "mul_1_uint64", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: mul_uint64_1, fnname: "mul_uint64_1", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: mul_1_uint64, fnname: "mul_1_uint64", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: mul_uint64_1, fnname: "mul_uint64_1", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: mul_4294967296_uint64, fnname: "mul_4294967296_uint64", in: 0, want: 0}, test_uint64{fn: mul_uint64_4294967296, fnname: "mul_uint64_4294967296", in: 0, want: 0}, test_uint64{fn: mul_4294967296_uint64, fnname: "mul_4294967296_uint64", in: 1, want: 4294967296}, test_uint64{fn: mul_uint64_4294967296, fnname: "mul_uint64_4294967296", in: 1, want: 4294967296}, test_uint64{fn: mul_4294967296_uint64, fnname: "mul_4294967296_uint64", in: 4294967296, want: 0}, test_uint64{fn: mul_uint64_4294967296, fnname: "mul_uint64_4294967296", in: 4294967296, want: 0}, test_uint64{fn: mul_4294967296_uint64, fnname: "mul_4294967296_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: mul_uint64_4294967296, fnname: "mul_uint64_4294967296", in: 9223372036854775808, want: 0}, test_uint64{fn: mul_4294967296_uint64, fnname: "mul_4294967296_uint64", in: 18446744073709551615, want: 18446744069414584320}, test_uint64{fn: mul_uint64_4294967296, fnname: "mul_uint64_4294967296", in: 18446744073709551615, want: 18446744069414584320}, test_uint64{fn: mul_9223372036854775808_uint64, fnname: "mul_9223372036854775808_uint64", in: 0, want: 0}, test_uint64{fn: mul_uint64_9223372036854775808, fnname: "mul_uint64_9223372036854775808", in: 0, want: 0}, test_uint64{fn: mul_9223372036854775808_uint64, fnname: "mul_9223372036854775808_uint64", in: 1, want: 9223372036854775808}, test_uint64{fn: mul_uint64_9223372036854775808, fnname: "mul_uint64_9223372036854775808", in: 1, want: 9223372036854775808}, test_uint64{fn: mul_9223372036854775808_uint64, fnname: "mul_9223372036854775808_uint64", in: 4294967296, want: 0}, test_uint64{fn: mul_uint64_9223372036854775808, fnname: "mul_uint64_9223372036854775808", in: 4294967296, want: 0}, test_uint64{fn: mul_9223372036854775808_uint64, fnname: "mul_9223372036854775808_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: mul_uint64_9223372036854775808, fnname: "mul_uint64_9223372036854775808", in: 9223372036854775808, want: 0}, test_uint64{fn: mul_9223372036854775808_uint64, fnname: "mul_9223372036854775808_uint64", in: 18446744073709551615, want: 9223372036854775808}, test_uint64{fn: mul_uint64_9223372036854775808, fnname: "mul_uint64_9223372036854775808", in: 18446744073709551615, want: 9223372036854775808}, test_uint64{fn: mul_18446744073709551615_uint64, fnname: "mul_18446744073709551615_uint64", in: 0, want: 0}, test_uint64{fn: mul_uint64_18446744073709551615, fnname: "mul_uint64_18446744073709551615", in: 0, want: 0}, test_uint64{fn: mul_18446744073709551615_uint64, fnname: "mul_18446744073709551615_uint64", in: 1, want: 18446744073709551615}, test_uint64{fn: mul_uint64_18446744073709551615, fnname: "mul_uint64_18446744073709551615", in: 1, want: 18446744073709551615}, test_uint64{fn: mul_18446744073709551615_uint64, fnname: "mul_18446744073709551615_uint64", in: 4294967296, want: 18446744069414584320}, test_uint64{fn: mul_uint64_18446744073709551615, fnname: "mul_uint64_18446744073709551615", in: 4294967296, want: 18446744069414584320}, test_uint64{fn: mul_18446744073709551615_uint64, fnname: "mul_18446744073709551615_uint64", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: mul_uint64_18446744073709551615, fnname: "mul_uint64_18446744073709551615", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: mul_18446744073709551615_uint64, fnname: "mul_18446744073709551615_uint64", in: 18446744073709551615, want: 1}, test_uint64{fn: mul_uint64_18446744073709551615, fnname: "mul_uint64_18446744073709551615", in: 18446744073709551615, want: 1}, test_uint64{fn: lsh_0_uint64, fnname: "lsh_0_uint64", in: 0, want: 0}, test_uint64{fn: lsh_uint64_0, fnname: "lsh_uint64_0", in: 0, want: 0}, test_uint64{fn: lsh_0_uint64, fnname: "lsh_0_uint64", in: 1, want: 0}, test_uint64{fn: lsh_uint64_0, fnname: "lsh_uint64_0", in: 1, want: 1}, test_uint64{fn: lsh_0_uint64, fnname: "lsh_0_uint64", in: 4294967296, want: 0}, test_uint64{fn: lsh_uint64_0, fnname: "lsh_uint64_0", in: 4294967296, want: 4294967296}, test_uint64{fn: lsh_0_uint64, fnname: "lsh_0_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: lsh_uint64_0, fnname: "lsh_uint64_0", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: lsh_0_uint64, fnname: "lsh_0_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: lsh_uint64_0, fnname: "lsh_uint64_0", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: lsh_1_uint64, fnname: "lsh_1_uint64", in: 0, want: 1}, test_uint64{fn: lsh_uint64_1, fnname: "lsh_uint64_1", in: 0, want: 0}, test_uint64{fn: lsh_1_uint64, fnname: "lsh_1_uint64", in: 1, want: 2}, test_uint64{fn: lsh_uint64_1, fnname: "lsh_uint64_1", in: 1, want: 2}, test_uint64{fn: lsh_1_uint64, fnname: "lsh_1_uint64", in: 4294967296, want: 0}, test_uint64{fn: lsh_uint64_1, fnname: "lsh_uint64_1", in: 4294967296, want: 8589934592}, test_uint64{fn: lsh_1_uint64, fnname: "lsh_1_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: lsh_uint64_1, fnname: "lsh_uint64_1", in: 9223372036854775808, want: 0}, test_uint64{fn: lsh_1_uint64, fnname: "lsh_1_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: lsh_uint64_1, fnname: "lsh_uint64_1", in: 18446744073709551615, want: 18446744073709551614}, test_uint64{fn: lsh_4294967296_uint64, fnname: "lsh_4294967296_uint64", in: 0, want: 4294967296}, test_uint64{fn: lsh_uint64_4294967296, fnname: "lsh_uint64_4294967296", in: 0, want: 0}, test_uint64{fn: lsh_4294967296_uint64, fnname: "lsh_4294967296_uint64", in: 1, want: 8589934592}, test_uint64{fn: lsh_uint64_4294967296, fnname: "lsh_uint64_4294967296", in: 1, want: 0}, test_uint64{fn: lsh_4294967296_uint64, fnname: "lsh_4294967296_uint64", in: 4294967296, want: 0}, test_uint64{fn: lsh_uint64_4294967296, fnname: "lsh_uint64_4294967296", in: 4294967296, want: 0}, test_uint64{fn: lsh_4294967296_uint64, fnname: "lsh_4294967296_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: lsh_uint64_4294967296, fnname: "lsh_uint64_4294967296", in: 9223372036854775808, want: 0}, test_uint64{fn: lsh_4294967296_uint64, fnname: "lsh_4294967296_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: lsh_uint64_4294967296, fnname: "lsh_uint64_4294967296", in: 18446744073709551615, want: 0}, test_uint64{fn: lsh_9223372036854775808_uint64, fnname: "lsh_9223372036854775808_uint64", in: 0, want: 9223372036854775808}, test_uint64{fn: lsh_uint64_9223372036854775808, fnname: "lsh_uint64_9223372036854775808", in: 0, want: 0}, test_uint64{fn: lsh_9223372036854775808_uint64, fnname: "lsh_9223372036854775808_uint64", in: 1, want: 0}, test_uint64{fn: lsh_uint64_9223372036854775808, fnname: "lsh_uint64_9223372036854775808", in: 1, want: 0}, test_uint64{fn: lsh_9223372036854775808_uint64, fnname: "lsh_9223372036854775808_uint64", in: 4294967296, want: 0}, test_uint64{fn: lsh_uint64_9223372036854775808, fnname: "lsh_uint64_9223372036854775808", in: 4294967296, want: 0}, test_uint64{fn: lsh_9223372036854775808_uint64, fnname: "lsh_9223372036854775808_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: lsh_uint64_9223372036854775808, fnname: "lsh_uint64_9223372036854775808", in: 9223372036854775808, want: 0}, test_uint64{fn: lsh_9223372036854775808_uint64, fnname: "lsh_9223372036854775808_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: lsh_uint64_9223372036854775808, fnname: "lsh_uint64_9223372036854775808", in: 18446744073709551615, want: 0}, test_uint64{fn: lsh_18446744073709551615_uint64, fnname: "lsh_18446744073709551615_uint64", in: 0, want: 18446744073709551615}, test_uint64{fn: lsh_uint64_18446744073709551615, fnname: "lsh_uint64_18446744073709551615", in: 0, want: 0}, test_uint64{fn: lsh_18446744073709551615_uint64, fnname: "lsh_18446744073709551615_uint64", in: 1, want: 18446744073709551614}, test_uint64{fn: lsh_uint64_18446744073709551615, fnname: "lsh_uint64_18446744073709551615", in: 1, want: 0}, test_uint64{fn: lsh_18446744073709551615_uint64, fnname: "lsh_18446744073709551615_uint64", in: 4294967296, want: 0}, test_uint64{fn: lsh_uint64_18446744073709551615, fnname: "lsh_uint64_18446744073709551615", in: 4294967296, want: 0}, test_uint64{fn: lsh_18446744073709551615_uint64, fnname: "lsh_18446744073709551615_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: lsh_uint64_18446744073709551615, fnname: "lsh_uint64_18446744073709551615", in: 9223372036854775808, want: 0}, test_uint64{fn: lsh_18446744073709551615_uint64, fnname: "lsh_18446744073709551615_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: lsh_uint64_18446744073709551615, fnname: "lsh_uint64_18446744073709551615", in: 18446744073709551615, want: 0}, test_uint64{fn: rsh_0_uint64, fnname: "rsh_0_uint64", in: 0, want: 0}, test_uint64{fn: rsh_uint64_0, fnname: "rsh_uint64_0", in: 0, want: 0}, test_uint64{fn: rsh_0_uint64, fnname: "rsh_0_uint64", in: 1, want: 0}, test_uint64{fn: rsh_uint64_0, fnname: "rsh_uint64_0", in: 1, want: 1}, test_uint64{fn: rsh_0_uint64, fnname: "rsh_0_uint64", in: 4294967296, want: 0}, test_uint64{fn: rsh_uint64_0, fnname: "rsh_uint64_0", in: 4294967296, want: 4294967296}, test_uint64{fn: rsh_0_uint64, fnname: "rsh_0_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: rsh_uint64_0, fnname: "rsh_uint64_0", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: rsh_0_uint64, fnname: "rsh_0_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: rsh_uint64_0, fnname: "rsh_uint64_0", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: rsh_1_uint64, fnname: "rsh_1_uint64", in: 0, want: 1}, test_uint64{fn: rsh_uint64_1, fnname: "rsh_uint64_1", in: 0, want: 0}, test_uint64{fn: rsh_1_uint64, fnname: "rsh_1_uint64", in: 1, want: 0}, test_uint64{fn: rsh_uint64_1, fnname: "rsh_uint64_1", in: 1, want: 0}, test_uint64{fn: rsh_1_uint64, fnname: "rsh_1_uint64", in: 4294967296, want: 0}, test_uint64{fn: rsh_uint64_1, fnname: "rsh_uint64_1", in: 4294967296, want: 2147483648}, test_uint64{fn: rsh_1_uint64, fnname: "rsh_1_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: rsh_uint64_1, fnname: "rsh_uint64_1", in: 9223372036854775808, want: 4611686018427387904}, test_uint64{fn: rsh_1_uint64, fnname: "rsh_1_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: rsh_uint64_1, fnname: "rsh_uint64_1", in: 18446744073709551615, want: 9223372036854775807}, test_uint64{fn: rsh_4294967296_uint64, fnname: "rsh_4294967296_uint64", in: 0, want: 4294967296}, test_uint64{fn: rsh_uint64_4294967296, fnname: "rsh_uint64_4294967296", in: 0, want: 0}, test_uint64{fn: rsh_4294967296_uint64, fnname: "rsh_4294967296_uint64", in: 1, want: 2147483648}, test_uint64{fn: rsh_uint64_4294967296, fnname: "rsh_uint64_4294967296", in: 1, want: 0}, test_uint64{fn: rsh_4294967296_uint64, fnname: "rsh_4294967296_uint64", in: 4294967296, want: 0}, test_uint64{fn: rsh_uint64_4294967296, fnname: "rsh_uint64_4294967296", in: 4294967296, want: 0}, test_uint64{fn: rsh_4294967296_uint64, fnname: "rsh_4294967296_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: rsh_uint64_4294967296, fnname: "rsh_uint64_4294967296", in: 9223372036854775808, want: 0}, test_uint64{fn: rsh_4294967296_uint64, fnname: "rsh_4294967296_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: rsh_uint64_4294967296, fnname: "rsh_uint64_4294967296", in: 18446744073709551615, want: 0}, test_uint64{fn: rsh_9223372036854775808_uint64, fnname: "rsh_9223372036854775808_uint64", in: 0, want: 9223372036854775808}, test_uint64{fn: rsh_uint64_9223372036854775808, fnname: "rsh_uint64_9223372036854775808", in: 0, want: 0}, test_uint64{fn: rsh_9223372036854775808_uint64, fnname: "rsh_9223372036854775808_uint64", in: 1, want: 4611686018427387904}, test_uint64{fn: rsh_uint64_9223372036854775808, fnname: "rsh_uint64_9223372036854775808", in: 1, want: 0}, test_uint64{fn: rsh_9223372036854775808_uint64, fnname: "rsh_9223372036854775808_uint64", in: 4294967296, want: 0}, test_uint64{fn: rsh_uint64_9223372036854775808, fnname: "rsh_uint64_9223372036854775808", in: 4294967296, want: 0}, test_uint64{fn: rsh_9223372036854775808_uint64, fnname: "rsh_9223372036854775808_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: rsh_uint64_9223372036854775808, fnname: "rsh_uint64_9223372036854775808", in: 9223372036854775808, want: 0}, test_uint64{fn: rsh_9223372036854775808_uint64, fnname: "rsh_9223372036854775808_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: rsh_uint64_9223372036854775808, fnname: "rsh_uint64_9223372036854775808", in: 18446744073709551615, want: 0}, test_uint64{fn: rsh_18446744073709551615_uint64, fnname: "rsh_18446744073709551615_uint64", in: 0, want: 18446744073709551615}, test_uint64{fn: rsh_uint64_18446744073709551615, fnname: "rsh_uint64_18446744073709551615", in: 0, want: 0}, test_uint64{fn: rsh_18446744073709551615_uint64, fnname: "rsh_18446744073709551615_uint64", in: 1, want: 9223372036854775807}, test_uint64{fn: rsh_uint64_18446744073709551615, fnname: "rsh_uint64_18446744073709551615", in: 1, want: 0}, test_uint64{fn: rsh_18446744073709551615_uint64, fnname: "rsh_18446744073709551615_uint64", in: 4294967296, want: 0}, test_uint64{fn: rsh_uint64_18446744073709551615, fnname: "rsh_uint64_18446744073709551615", in: 4294967296, want: 0}, test_uint64{fn: rsh_18446744073709551615_uint64, fnname: "rsh_18446744073709551615_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: rsh_uint64_18446744073709551615, fnname: "rsh_uint64_18446744073709551615", in: 9223372036854775808, want: 0}, test_uint64{fn: rsh_18446744073709551615_uint64, fnname: "rsh_18446744073709551615_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: rsh_uint64_18446744073709551615, fnname: "rsh_uint64_18446744073709551615", in: 18446744073709551615, want: 0}, test_uint64{fn: mod_0_uint64, fnname: "mod_0_uint64", in: 1, want: 0}, test_uint64{fn: mod_0_uint64, fnname: "mod_0_uint64", in: 4294967296, want: 0}, test_uint64{fn: mod_0_uint64, fnname: "mod_0_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: mod_0_uint64, fnname: "mod_0_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: mod_uint64_1, fnname: "mod_uint64_1", in: 0, want: 0}, test_uint64{fn: mod_1_uint64, fnname: "mod_1_uint64", in: 1, want: 0}, test_uint64{fn: mod_uint64_1, fnname: "mod_uint64_1", in: 1, want: 0}, test_uint64{fn: mod_1_uint64, fnname: "mod_1_uint64", in: 4294967296, want: 1}, test_uint64{fn: mod_uint64_1, fnname: "mod_uint64_1", in: 4294967296, want: 0}, test_uint64{fn: mod_1_uint64, fnname: "mod_1_uint64", in: 9223372036854775808, want: 1}, test_uint64{fn: mod_uint64_1, fnname: "mod_uint64_1", in: 9223372036854775808, want: 0}, test_uint64{fn: mod_1_uint64, fnname: "mod_1_uint64", in: 18446744073709551615, want: 1}, test_uint64{fn: mod_uint64_1, fnname: "mod_uint64_1", in: 18446744073709551615, want: 0}, test_uint64{fn: mod_uint64_4294967296, fnname: "mod_uint64_4294967296", in: 0, want: 0}, test_uint64{fn: mod_4294967296_uint64, fnname: "mod_4294967296_uint64", in: 1, want: 0}, test_uint64{fn: mod_uint64_4294967296, fnname: "mod_uint64_4294967296", in: 1, want: 1}, test_uint64{fn: mod_4294967296_uint64, fnname: "mod_4294967296_uint64", in: 4294967296, want: 0}, test_uint64{fn: mod_uint64_4294967296, fnname: "mod_uint64_4294967296", in: 4294967296, want: 0}, test_uint64{fn: mod_4294967296_uint64, fnname: "mod_4294967296_uint64", in: 9223372036854775808, want: 4294967296}, test_uint64{fn: mod_uint64_4294967296, fnname: "mod_uint64_4294967296", in: 9223372036854775808, want: 0}, test_uint64{fn: mod_4294967296_uint64, fnname: "mod_4294967296_uint64", in: 18446744073709551615, want: 4294967296}, test_uint64{fn: mod_uint64_4294967296, fnname: "mod_uint64_4294967296", in: 18446744073709551615, want: 4294967295}, test_uint64{fn: mod_uint64_9223372036854775808, fnname: "mod_uint64_9223372036854775808", in: 0, want: 0}, test_uint64{fn: mod_9223372036854775808_uint64, fnname: "mod_9223372036854775808_uint64", in: 1, want: 0}, test_uint64{fn: mod_uint64_9223372036854775808, fnname: "mod_uint64_9223372036854775808", in: 1, want: 1}, test_uint64{fn: mod_9223372036854775808_uint64, fnname: "mod_9223372036854775808_uint64", in: 4294967296, want: 0}, test_uint64{fn: mod_uint64_9223372036854775808, fnname: "mod_uint64_9223372036854775808", in: 4294967296, want: 4294967296}, test_uint64{fn: mod_9223372036854775808_uint64, fnname: "mod_9223372036854775808_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: mod_uint64_9223372036854775808, fnname: "mod_uint64_9223372036854775808", in: 9223372036854775808, want: 0}, test_uint64{fn: mod_9223372036854775808_uint64, fnname: "mod_9223372036854775808_uint64", in: 18446744073709551615, want: 9223372036854775808}, test_uint64{fn: mod_uint64_9223372036854775808, fnname: "mod_uint64_9223372036854775808", in: 18446744073709551615, want: 9223372036854775807}, test_uint64{fn: mod_uint64_18446744073709551615, fnname: "mod_uint64_18446744073709551615", in: 0, want: 0}, test_uint64{fn: mod_18446744073709551615_uint64, fnname: "mod_18446744073709551615_uint64", in: 1, want: 0}, test_uint64{fn: mod_uint64_18446744073709551615, fnname: "mod_uint64_18446744073709551615", in: 1, want: 1}, test_uint64{fn: mod_18446744073709551615_uint64, fnname: "mod_18446744073709551615_uint64", in: 4294967296, want: 4294967295}, test_uint64{fn: mod_uint64_18446744073709551615, fnname: "mod_uint64_18446744073709551615", in: 4294967296, want: 4294967296}, test_uint64{fn: mod_18446744073709551615_uint64, fnname: "mod_18446744073709551615_uint64", in: 9223372036854775808, want: 9223372036854775807}, test_uint64{fn: mod_uint64_18446744073709551615, fnname: "mod_uint64_18446744073709551615", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: mod_18446744073709551615_uint64, fnname: "mod_18446744073709551615_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: mod_uint64_18446744073709551615, fnname: "mod_uint64_18446744073709551615", in: 18446744073709551615, want: 0}, test_uint64{fn: and_0_uint64, fnname: "and_0_uint64", in: 0, want: 0}, test_uint64{fn: and_uint64_0, fnname: "and_uint64_0", in: 0, want: 0}, test_uint64{fn: and_0_uint64, fnname: "and_0_uint64", in: 1, want: 0}, test_uint64{fn: and_uint64_0, fnname: "and_uint64_0", in: 1, want: 0}, test_uint64{fn: and_0_uint64, fnname: "and_0_uint64", in: 4294967296, want: 0}, test_uint64{fn: and_uint64_0, fnname: "and_uint64_0", in: 4294967296, want: 0}, test_uint64{fn: and_0_uint64, fnname: "and_0_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: and_uint64_0, fnname: "and_uint64_0", in: 9223372036854775808, want: 0}, test_uint64{fn: and_0_uint64, fnname: "and_0_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: and_uint64_0, fnname: "and_uint64_0", in: 18446744073709551615, want: 0}, test_uint64{fn: and_1_uint64, fnname: "and_1_uint64", in: 0, want: 0}, test_uint64{fn: and_uint64_1, fnname: "and_uint64_1", in: 0, want: 0}, test_uint64{fn: and_1_uint64, fnname: "and_1_uint64", in: 1, want: 1}, test_uint64{fn: and_uint64_1, fnname: "and_uint64_1", in: 1, want: 1}, test_uint64{fn: and_1_uint64, fnname: "and_1_uint64", in: 4294967296, want: 0}, test_uint64{fn: and_uint64_1, fnname: "and_uint64_1", in: 4294967296, want: 0}, test_uint64{fn: and_1_uint64, fnname: "and_1_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: and_uint64_1, fnname: "and_uint64_1", in: 9223372036854775808, want: 0}, test_uint64{fn: and_1_uint64, fnname: "and_1_uint64", in: 18446744073709551615, want: 1}, test_uint64{fn: and_uint64_1, fnname: "and_uint64_1", in: 18446744073709551615, want: 1}, test_uint64{fn: and_4294967296_uint64, fnname: "and_4294967296_uint64", in: 0, want: 0}, test_uint64{fn: and_uint64_4294967296, fnname: "and_uint64_4294967296", in: 0, want: 0}, test_uint64{fn: and_4294967296_uint64, fnname: "and_4294967296_uint64", in: 1, want: 0}, test_uint64{fn: and_uint64_4294967296, fnname: "and_uint64_4294967296", in: 1, want: 0}, test_uint64{fn: and_4294967296_uint64, fnname: "and_4294967296_uint64", in: 4294967296, want: 4294967296}, test_uint64{fn: and_uint64_4294967296, fnname: "and_uint64_4294967296", in: 4294967296, want: 4294967296}, test_uint64{fn: and_4294967296_uint64, fnname: "and_4294967296_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: and_uint64_4294967296, fnname: "and_uint64_4294967296", in: 9223372036854775808, want: 0}, test_uint64{fn: and_4294967296_uint64, fnname: "and_4294967296_uint64", in: 18446744073709551615, want: 4294967296}, test_uint64{fn: and_uint64_4294967296, fnname: "and_uint64_4294967296", in: 18446744073709551615, want: 4294967296}, test_uint64{fn: and_9223372036854775808_uint64, fnname: "and_9223372036854775808_uint64", in: 0, want: 0}, test_uint64{fn: and_uint64_9223372036854775808, fnname: "and_uint64_9223372036854775808", in: 0, want: 0}, test_uint64{fn: and_9223372036854775808_uint64, fnname: "and_9223372036854775808_uint64", in: 1, want: 0}, test_uint64{fn: and_uint64_9223372036854775808, fnname: "and_uint64_9223372036854775808", in: 1, want: 0}, test_uint64{fn: and_9223372036854775808_uint64, fnname: "and_9223372036854775808_uint64", in: 4294967296, want: 0}, test_uint64{fn: and_uint64_9223372036854775808, fnname: "and_uint64_9223372036854775808", in: 4294967296, want: 0}, test_uint64{fn: and_9223372036854775808_uint64, fnname: "and_9223372036854775808_uint64", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: and_uint64_9223372036854775808, fnname: "and_uint64_9223372036854775808", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: and_9223372036854775808_uint64, fnname: "and_9223372036854775808_uint64", in: 18446744073709551615, want: 9223372036854775808}, test_uint64{fn: and_uint64_9223372036854775808, fnname: "and_uint64_9223372036854775808", in: 18446744073709551615, want: 9223372036854775808}, test_uint64{fn: and_18446744073709551615_uint64, fnname: "and_18446744073709551615_uint64", in: 0, want: 0}, test_uint64{fn: and_uint64_18446744073709551615, fnname: "and_uint64_18446744073709551615", in: 0, want: 0}, test_uint64{fn: and_18446744073709551615_uint64, fnname: "and_18446744073709551615_uint64", in: 1, want: 1}, test_uint64{fn: and_uint64_18446744073709551615, fnname: "and_uint64_18446744073709551615", in: 1, want: 1}, test_uint64{fn: and_18446744073709551615_uint64, fnname: "and_18446744073709551615_uint64", in: 4294967296, want: 4294967296}, test_uint64{fn: and_uint64_18446744073709551615, fnname: "and_uint64_18446744073709551615", in: 4294967296, want: 4294967296}, test_uint64{fn: and_18446744073709551615_uint64, fnname: "and_18446744073709551615_uint64", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: and_uint64_18446744073709551615, fnname: "and_uint64_18446744073709551615", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: and_18446744073709551615_uint64, fnname: "and_18446744073709551615_uint64", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: and_uint64_18446744073709551615, fnname: "and_uint64_18446744073709551615", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: or_0_uint64, fnname: "or_0_uint64", in: 0, want: 0}, test_uint64{fn: or_uint64_0, fnname: "or_uint64_0", in: 0, want: 0}, test_uint64{fn: or_0_uint64, fnname: "or_0_uint64", in: 1, want: 1}, test_uint64{fn: or_uint64_0, fnname: "or_uint64_0", in: 1, want: 1}, test_uint64{fn: or_0_uint64, fnname: "or_0_uint64", in: 4294967296, want: 4294967296}, test_uint64{fn: or_uint64_0, fnname: "or_uint64_0", in: 4294967296, want: 4294967296}, test_uint64{fn: or_0_uint64, fnname: "or_0_uint64", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: or_uint64_0, fnname: "or_uint64_0", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: or_0_uint64, fnname: "or_0_uint64", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: or_uint64_0, fnname: "or_uint64_0", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: or_1_uint64, fnname: "or_1_uint64", in: 0, want: 1}, test_uint64{fn: or_uint64_1, fnname: "or_uint64_1", in: 0, want: 1}, test_uint64{fn: or_1_uint64, fnname: "or_1_uint64", in: 1, want: 1}, test_uint64{fn: or_uint64_1, fnname: "or_uint64_1", in: 1, want: 1}, test_uint64{fn: or_1_uint64, fnname: "or_1_uint64", in: 4294967296, want: 4294967297}, test_uint64{fn: or_uint64_1, fnname: "or_uint64_1", in: 4294967296, want: 4294967297}, test_uint64{fn: or_1_uint64, fnname: "or_1_uint64", in: 9223372036854775808, want: 9223372036854775809}, test_uint64{fn: or_uint64_1, fnname: "or_uint64_1", in: 9223372036854775808, want: 9223372036854775809}, test_uint64{fn: or_1_uint64, fnname: "or_1_uint64", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: or_uint64_1, fnname: "or_uint64_1", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: or_4294967296_uint64, fnname: "or_4294967296_uint64", in: 0, want: 4294967296}, test_uint64{fn: or_uint64_4294967296, fnname: "or_uint64_4294967296", in: 0, want: 4294967296}, test_uint64{fn: or_4294967296_uint64, fnname: "or_4294967296_uint64", in: 1, want: 4294967297}, test_uint64{fn: or_uint64_4294967296, fnname: "or_uint64_4294967296", in: 1, want: 4294967297}, test_uint64{fn: or_4294967296_uint64, fnname: "or_4294967296_uint64", in: 4294967296, want: 4294967296}, test_uint64{fn: or_uint64_4294967296, fnname: "or_uint64_4294967296", in: 4294967296, want: 4294967296}, test_uint64{fn: or_4294967296_uint64, fnname: "or_4294967296_uint64", in: 9223372036854775808, want: 9223372041149743104}, test_uint64{fn: or_uint64_4294967296, fnname: "or_uint64_4294967296", in: 9223372036854775808, want: 9223372041149743104}, test_uint64{fn: or_4294967296_uint64, fnname: "or_4294967296_uint64", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: or_uint64_4294967296, fnname: "or_uint64_4294967296", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: or_9223372036854775808_uint64, fnname: "or_9223372036854775808_uint64", in: 0, want: 9223372036854775808}, test_uint64{fn: or_uint64_9223372036854775808, fnname: "or_uint64_9223372036854775808", in: 0, want: 9223372036854775808}, test_uint64{fn: or_9223372036854775808_uint64, fnname: "or_9223372036854775808_uint64", in: 1, want: 9223372036854775809}, test_uint64{fn: or_uint64_9223372036854775808, fnname: "or_uint64_9223372036854775808", in: 1, want: 9223372036854775809}, test_uint64{fn: or_9223372036854775808_uint64, fnname: "or_9223372036854775808_uint64", in: 4294967296, want: 9223372041149743104}, test_uint64{fn: or_uint64_9223372036854775808, fnname: "or_uint64_9223372036854775808", in: 4294967296, want: 9223372041149743104}, test_uint64{fn: or_9223372036854775808_uint64, fnname: "or_9223372036854775808_uint64", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: or_uint64_9223372036854775808, fnname: "or_uint64_9223372036854775808", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: or_9223372036854775808_uint64, fnname: "or_9223372036854775808_uint64", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: or_uint64_9223372036854775808, fnname: "or_uint64_9223372036854775808", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: or_18446744073709551615_uint64, fnname: "or_18446744073709551615_uint64", in: 0, want: 18446744073709551615}, test_uint64{fn: or_uint64_18446744073709551615, fnname: "or_uint64_18446744073709551615", in: 0, want: 18446744073709551615}, test_uint64{fn: or_18446744073709551615_uint64, fnname: "or_18446744073709551615_uint64", in: 1, want: 18446744073709551615}, test_uint64{fn: or_uint64_18446744073709551615, fnname: "or_uint64_18446744073709551615", in: 1, want: 18446744073709551615}, test_uint64{fn: or_18446744073709551615_uint64, fnname: "or_18446744073709551615_uint64", in: 4294967296, want: 18446744073709551615}, test_uint64{fn: or_uint64_18446744073709551615, fnname: "or_uint64_18446744073709551615", in: 4294967296, want: 18446744073709551615}, test_uint64{fn: or_18446744073709551615_uint64, fnname: "or_18446744073709551615_uint64", in: 9223372036854775808, want: 18446744073709551615}, test_uint64{fn: or_uint64_18446744073709551615, fnname: "or_uint64_18446744073709551615", in: 9223372036854775808, want: 18446744073709551615}, test_uint64{fn: or_18446744073709551615_uint64, fnname: "or_18446744073709551615_uint64", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: or_uint64_18446744073709551615, fnname: "or_uint64_18446744073709551615", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: xor_0_uint64, fnname: "xor_0_uint64", in: 0, want: 0}, test_uint64{fn: xor_uint64_0, fnname: "xor_uint64_0", in: 0, want: 0}, test_uint64{fn: xor_0_uint64, fnname: "xor_0_uint64", in: 1, want: 1}, test_uint64{fn: xor_uint64_0, fnname: "xor_uint64_0", in: 1, want: 1}, test_uint64{fn: xor_0_uint64, fnname: "xor_0_uint64", in: 4294967296, want: 4294967296}, test_uint64{fn: xor_uint64_0, fnname: "xor_uint64_0", in: 4294967296, want: 4294967296}, test_uint64{fn: xor_0_uint64, fnname: "xor_0_uint64", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: xor_uint64_0, fnname: "xor_uint64_0", in: 9223372036854775808, want: 9223372036854775808}, test_uint64{fn: xor_0_uint64, fnname: "xor_0_uint64", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: xor_uint64_0, fnname: "xor_uint64_0", in: 18446744073709551615, want: 18446744073709551615}, test_uint64{fn: xor_1_uint64, fnname: "xor_1_uint64", in: 0, want: 1}, test_uint64{fn: xor_uint64_1, fnname: "xor_uint64_1", in: 0, want: 1}, test_uint64{fn: xor_1_uint64, fnname: "xor_1_uint64", in: 1, want: 0}, test_uint64{fn: xor_uint64_1, fnname: "xor_uint64_1", in: 1, want: 0}, test_uint64{fn: xor_1_uint64, fnname: "xor_1_uint64", in: 4294967296, want: 4294967297}, test_uint64{fn: xor_uint64_1, fnname: "xor_uint64_1", in: 4294967296, want: 4294967297}, test_uint64{fn: xor_1_uint64, fnname: "xor_1_uint64", in: 9223372036854775808, want: 9223372036854775809}, test_uint64{fn: xor_uint64_1, fnname: "xor_uint64_1", in: 9223372036854775808, want: 9223372036854775809}, test_uint64{fn: xor_1_uint64, fnname: "xor_1_uint64", in: 18446744073709551615, want: 18446744073709551614}, test_uint64{fn: xor_uint64_1, fnname: "xor_uint64_1", in: 18446744073709551615, want: 18446744073709551614}, test_uint64{fn: xor_4294967296_uint64, fnname: "xor_4294967296_uint64", in: 0, want: 4294967296}, test_uint64{fn: xor_uint64_4294967296, fnname: "xor_uint64_4294967296", in: 0, want: 4294967296}, test_uint64{fn: xor_4294967296_uint64, fnname: "xor_4294967296_uint64", in: 1, want: 4294967297}, test_uint64{fn: xor_uint64_4294967296, fnname: "xor_uint64_4294967296", in: 1, want: 4294967297}, test_uint64{fn: xor_4294967296_uint64, fnname: "xor_4294967296_uint64", in: 4294967296, want: 0}, test_uint64{fn: xor_uint64_4294967296, fnname: "xor_uint64_4294967296", in: 4294967296, want: 0}, test_uint64{fn: xor_4294967296_uint64, fnname: "xor_4294967296_uint64", in: 9223372036854775808, want: 9223372041149743104}, test_uint64{fn: xor_uint64_4294967296, fnname: "xor_uint64_4294967296", in: 9223372036854775808, want: 9223372041149743104}, test_uint64{fn: xor_4294967296_uint64, fnname: "xor_4294967296_uint64", in: 18446744073709551615, want: 18446744069414584319}, test_uint64{fn: xor_uint64_4294967296, fnname: "xor_uint64_4294967296", in: 18446744073709551615, want: 18446744069414584319}, test_uint64{fn: xor_9223372036854775808_uint64, fnname: "xor_9223372036854775808_uint64", in: 0, want: 9223372036854775808}, test_uint64{fn: xor_uint64_9223372036854775808, fnname: "xor_uint64_9223372036854775808", in: 0, want: 9223372036854775808}, test_uint64{fn: xor_9223372036854775808_uint64, fnname: "xor_9223372036854775808_uint64", in: 1, want: 9223372036854775809}, test_uint64{fn: xor_uint64_9223372036854775808, fnname: "xor_uint64_9223372036854775808", in: 1, want: 9223372036854775809}, test_uint64{fn: xor_9223372036854775808_uint64, fnname: "xor_9223372036854775808_uint64", in: 4294967296, want: 9223372041149743104}, test_uint64{fn: xor_uint64_9223372036854775808, fnname: "xor_uint64_9223372036854775808", in: 4294967296, want: 9223372041149743104}, test_uint64{fn: xor_9223372036854775808_uint64, fnname: "xor_9223372036854775808_uint64", in: 9223372036854775808, want: 0}, test_uint64{fn: xor_uint64_9223372036854775808, fnname: "xor_uint64_9223372036854775808", in: 9223372036854775808, want: 0}, test_uint64{fn: xor_9223372036854775808_uint64, fnname: "xor_9223372036854775808_uint64", in: 18446744073709551615, want: 9223372036854775807}, test_uint64{fn: xor_uint64_9223372036854775808, fnname: "xor_uint64_9223372036854775808", in: 18446744073709551615, want: 9223372036854775807}, test_uint64{fn: xor_18446744073709551615_uint64, fnname: "xor_18446744073709551615_uint64", in: 0, want: 18446744073709551615}, test_uint64{fn: xor_uint64_18446744073709551615, fnname: "xor_uint64_18446744073709551615", in: 0, want: 18446744073709551615}, test_uint64{fn: xor_18446744073709551615_uint64, fnname: "xor_18446744073709551615_uint64", in: 1, want: 18446744073709551614}, test_uint64{fn: xor_uint64_18446744073709551615, fnname: "xor_uint64_18446744073709551615", in: 1, want: 18446744073709551614}, test_uint64{fn: xor_18446744073709551615_uint64, fnname: "xor_18446744073709551615_uint64", in: 4294967296, want: 18446744069414584319}, test_uint64{fn: xor_uint64_18446744073709551615, fnname: "xor_uint64_18446744073709551615", in: 4294967296, want: 18446744069414584319}, test_uint64{fn: xor_18446744073709551615_uint64, fnname: "xor_18446744073709551615_uint64", in: 9223372036854775808, want: 9223372036854775807}, test_uint64{fn: xor_uint64_18446744073709551615, fnname: "xor_uint64_18446744073709551615", in: 9223372036854775808, want: 9223372036854775807}, test_uint64{fn: xor_18446744073709551615_uint64, fnname: "xor_18446744073709551615_uint64", in: 18446744073709551615, want: 0}, test_uint64{fn: xor_uint64_18446744073709551615, fnname: "xor_uint64_18446744073709551615", in: 18446744073709551615, want: 0}} type test_uint64mul struct { fn func(uint64) uint64 fnname string in uint64 want uint64 } var tests_uint64mul = []test_uint64{ test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 3, want: 9}, test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 3, want: 9}, test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 5, want: 15}, test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 5, want: 15}, test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 7, want: 21}, test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 7, want: 21}, test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 9, want: 27}, test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 9, want: 27}, test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 10, want: 30}, test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 10, want: 30}, test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 11, want: 33}, test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 11, want: 33}, test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 13, want: 39}, test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 13, want: 39}, test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 19, want: 57}, test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 19, want: 57}, test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 21, want: 63}, test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 21, want: 63}, test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 25, want: 75}, test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 25, want: 75}, test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 27, want: 81}, test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 27, want: 81}, test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 37, want: 111}, test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 37, want: 111}, test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 41, want: 123}, test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 41, want: 123}, test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 45, want: 135}, test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 45, want: 135}, test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 73, want: 219}, test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 73, want: 219}, test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 81, want: 243}, test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 81, want: 243}, test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 3, want: 15}, test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 3, want: 15}, test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 5, want: 25}, test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 5, want: 25}, test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 7, want: 35}, test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 7, want: 35}, test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 9, want: 45}, test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 9, want: 45}, test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 10, want: 50}, test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 10, want: 50}, test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 11, want: 55}, test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 11, want: 55}, test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 13, want: 65}, test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 13, want: 65}, test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 19, want: 95}, test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 19, want: 95}, test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 21, want: 105}, test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 21, want: 105}, test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 25, want: 125}, test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 25, want: 125}, test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 27, want: 135}, test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 27, want: 135}, test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 37, want: 185}, test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 37, want: 185}, test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 41, want: 205}, test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 41, want: 205}, test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 45, want: 225}, test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 45, want: 225}, test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 73, want: 365}, test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 73, want: 365}, test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 81, want: 405}, test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 81, want: 405}, test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 3, want: 21}, test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 3, want: 21}, test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 5, want: 35}, test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 5, want: 35}, test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 7, want: 49}, test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 7, want: 49}, test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 9, want: 63}, test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 9, want: 63}, test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 10, want: 70}, test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 10, want: 70}, test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 11, want: 77}, test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 11, want: 77}, test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 13, want: 91}, test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 13, want: 91}, test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 19, want: 133}, test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 19, want: 133}, test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 21, want: 147}, test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 21, want: 147}, test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 25, want: 175}, test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 25, want: 175}, test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 27, want: 189}, test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 27, want: 189}, test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 37, want: 259}, test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 37, want: 259}, test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 41, want: 287}, test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 41, want: 287}, test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 45, want: 315}, test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 45, want: 315}, test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 73, want: 511}, test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 73, want: 511}, test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 81, want: 567}, test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 81, want: 567}, test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 3, want: 27}, test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 3, want: 27}, test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 5, want: 45}, test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 5, want: 45}, test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 7, want: 63}, test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 7, want: 63}, test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 9, want: 81}, test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 9, want: 81}, test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 10, want: 90}, test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 10, want: 90}, test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 11, want: 99}, test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 11, want: 99}, test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 13, want: 117}, test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 13, want: 117}, test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 19, want: 171}, test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 19, want: 171}, test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 21, want: 189}, test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 21, want: 189}, test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 25, want: 225}, test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 25, want: 225}, test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 27, want: 243}, test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 27, want: 243}, test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 37, want: 333}, test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 37, want: 333}, test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 41, want: 369}, test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 41, want: 369}, test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 45, want: 405}, test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 45, want: 405}, test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 73, want: 657}, test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 73, want: 657}, test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 81, want: 729}, test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 81, want: 729}, test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 3, want: 30}, test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 3, want: 30}, test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 5, want: 50}, test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 5, want: 50}, test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 7, want: 70}, test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 7, want: 70}, test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 9, want: 90}, test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 9, want: 90}, test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 10, want: 100}, test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 10, want: 100}, test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 11, want: 110}, test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 11, want: 110}, test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 13, want: 130}, test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 13, want: 130}, test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 19, want: 190}, test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 19, want: 190}, test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 21, want: 210}, test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 21, want: 210}, test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 25, want: 250}, test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 25, want: 250}, test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 27, want: 270}, test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 27, want: 270}, test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 37, want: 370}, test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 37, want: 370}, test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 41, want: 410}, test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 41, want: 410}, test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 45, want: 450}, test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 45, want: 450}, test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 73, want: 730}, test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 73, want: 730}, test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 81, want: 810}, test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 81, want: 810}, test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 3, want: 33}, test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 3, want: 33}, test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 5, want: 55}, test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 5, want: 55}, test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 7, want: 77}, test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 7, want: 77}, test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 9, want: 99}, test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 9, want: 99}, test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 10, want: 110}, test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 10, want: 110}, test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 11, want: 121}, test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 11, want: 121}, test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 13, want: 143}, test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 13, want: 143}, test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 19, want: 209}, test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 19, want: 209}, test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 21, want: 231}, test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 21, want: 231}, test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 25, want: 275}, test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 25, want: 275}, test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 27, want: 297}, test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 27, want: 297}, test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 37, want: 407}, test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 37, want: 407}, test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 41, want: 451}, test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 41, want: 451}, test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 45, want: 495}, test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 45, want: 495}, test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 73, want: 803}, test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 73, want: 803}, test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 81, want: 891}, test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 81, want: 891}, test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 3, want: 39}, test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 3, want: 39}, test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 5, want: 65}, test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 5, want: 65}, test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 7, want: 91}, test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 7, want: 91}, test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 9, want: 117}, test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 9, want: 117}, test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 10, want: 130}, test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 10, want: 130}, test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 11, want: 143}, test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 11, want: 143}, test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 13, want: 169}, test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 13, want: 169}, test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 19, want: 247}, test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 19, want: 247}, test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 21, want: 273}, test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 21, want: 273}, test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 25, want: 325}, test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 25, want: 325}, test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 27, want: 351}, test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 27, want: 351}, test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 37, want: 481}, test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 37, want: 481}, test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 41, want: 533}, test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 41, want: 533}, test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 45, want: 585}, test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 45, want: 585}, test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 73, want: 949}, test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 73, want: 949}, test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 81, want: 1053}, test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 81, want: 1053}, test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 3, want: 57}, test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 3, want: 57}, test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 5, want: 95}, test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 5, want: 95}, test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 7, want: 133}, test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 7, want: 133}, test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 9, want: 171}, test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 9, want: 171}, test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 10, want: 190}, test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 10, want: 190}, test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 11, want: 209}, test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 11, want: 209}, test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 13, want: 247}, test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 13, want: 247}, test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 19, want: 361}, test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 19, want: 361}, test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 21, want: 399}, test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 21, want: 399}, test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 25, want: 475}, test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 25, want: 475}, test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 27, want: 513}, test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 27, want: 513}, test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 37, want: 703}, test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 37, want: 703}, test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 41, want: 779}, test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 41, want: 779}, test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 45, want: 855}, test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 45, want: 855}, test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 73, want: 1387}, test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 73, want: 1387}, test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 81, want: 1539}, test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 81, want: 1539}, test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 3, want: 63}, test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 3, want: 63}, test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 5, want: 105}, test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 5, want: 105}, test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 7, want: 147}, test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 7, want: 147}, test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 9, want: 189}, test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 9, want: 189}, test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 10, want: 210}, test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 10, want: 210}, test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 11, want: 231}, test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 11, want: 231}, test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 13, want: 273}, test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 13, want: 273}, test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 19, want: 399}, test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 19, want: 399}, test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 21, want: 441}, test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 21, want: 441}, test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 25, want: 525}, test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 25, want: 525}, test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 27, want: 567}, test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 27, want: 567}, test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 37, want: 777}, test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 37, want: 777}, test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 41, want: 861}, test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 41, want: 861}, test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 45, want: 945}, test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 45, want: 945}, test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 73, want: 1533}, test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 73, want: 1533}, test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 81, want: 1701}, test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 81, want: 1701}, test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 3, want: 75}, test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 3, want: 75}, test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 5, want: 125}, test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 5, want: 125}, test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 7, want: 175}, test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 7, want: 175}, test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 9, want: 225}, test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 9, want: 225}, test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 10, want: 250}, test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 10, want: 250}, test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 11, want: 275}, test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 11, want: 275}, test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 13, want: 325}, test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 13, want: 325}, test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 19, want: 475}, test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 19, want: 475}, test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 21, want: 525}, test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 21, want: 525}, test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 25, want: 625}, test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 25, want: 625}, test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 27, want: 675}, test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 27, want: 675}, test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 37, want: 925}, test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 37, want: 925}, test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 41, want: 1025}, test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 41, want: 1025}, test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 45, want: 1125}, test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 45, want: 1125}, test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 73, want: 1825}, test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 73, want: 1825}, test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 81, want: 2025}, test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 81, want: 2025}, test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 3, want: 81}, test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 3, want: 81}, test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 5, want: 135}, test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 5, want: 135}, test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 7, want: 189}, test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 7, want: 189}, test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 9, want: 243}, test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 9, want: 243}, test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 10, want: 270}, test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 10, want: 270}, test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 11, want: 297}, test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 11, want: 297}, test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 13, want: 351}, test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 13, want: 351}, test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 19, want: 513}, test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 19, want: 513}, test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 21, want: 567}, test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 21, want: 567}, test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 25, want: 675}, test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 25, want: 675}, test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 27, want: 729}, test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 27, want: 729}, test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 37, want: 999}, test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 37, want: 999}, test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 41, want: 1107}, test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 41, want: 1107}, test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 45, want: 1215}, test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 45, want: 1215}, test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 73, want: 1971}, test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 73, want: 1971}, test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 81, want: 2187}, test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 81, want: 2187}, test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 3, want: 111}, test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 3, want: 111}, test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 5, want: 185}, test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 5, want: 185}, test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 7, want: 259}, test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 7, want: 259}, test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 9, want: 333}, test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 9, want: 333}, test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 10, want: 370}, test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 10, want: 370}, test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 11, want: 407}, test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 11, want: 407}, test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 13, want: 481}, test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 13, want: 481}, test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 19, want: 703}, test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 19, want: 703}, test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 21, want: 777}, test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 21, want: 777}, test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 25, want: 925}, test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 25, want: 925}, test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 27, want: 999}, test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 27, want: 999}, test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 37, want: 1369}, test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 37, want: 1369}, test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 41, want: 1517}, test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 41, want: 1517}, test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 45, want: 1665}, test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 45, want: 1665}, test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 73, want: 2701}, test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 73, want: 2701}, test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 81, want: 2997}, test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 81, want: 2997}, test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 3, want: 123}, test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 3, want: 123}, test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 5, want: 205}, test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 5, want: 205}, test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 7, want: 287}, test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 7, want: 287}, test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 9, want: 369}, test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 9, want: 369}, test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 10, want: 410}, test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 10, want: 410}, test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 11, want: 451}, test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 11, want: 451}, test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 13, want: 533}, test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 13, want: 533}, test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 19, want: 779}, test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 19, want: 779}, test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 21, want: 861}, test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 21, want: 861}, test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 25, want: 1025}, test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 25, want: 1025}, test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 27, want: 1107}, test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 27, want: 1107}, test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 37, want: 1517}, test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 37, want: 1517}, test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 41, want: 1681}, test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 41, want: 1681}, test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 45, want: 1845}, test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 45, want: 1845}, test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 73, want: 2993}, test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 73, want: 2993}, test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 81, want: 3321}, test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 81, want: 3321}, test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 3, want: 135}, test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 3, want: 135}, test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 5, want: 225}, test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 5, want: 225}, test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 7, want: 315}, test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 7, want: 315}, test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 9, want: 405}, test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 9, want: 405}, test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 10, want: 450}, test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 10, want: 450}, test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 11, want: 495}, test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 11, want: 495}, test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 13, want: 585}, test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 13, want: 585}, test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 19, want: 855}, test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 19, want: 855}, test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 21, want: 945}, test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 21, want: 945}, test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 25, want: 1125}, test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 25, want: 1125}, test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 27, want: 1215}, test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 27, want: 1215}, test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 37, want: 1665}, test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 37, want: 1665}, test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 41, want: 1845}, test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 41, want: 1845}, test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 45, want: 2025}, test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 45, want: 2025}, test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 73, want: 3285}, test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 73, want: 3285}, test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 81, want: 3645}, test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 81, want: 3645}, test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 3, want: 219}, test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 3, want: 219}, test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 5, want: 365}, test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 5, want: 365}, test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 7, want: 511}, test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 7, want: 511}, test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 9, want: 657}, test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 9, want: 657}, test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 10, want: 730}, test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 10, want: 730}, test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 11, want: 803}, test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 11, want: 803}, test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 13, want: 949}, test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 13, want: 949}, test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 19, want: 1387}, test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 19, want: 1387}, test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 21, want: 1533}, test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 21, want: 1533}, test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 25, want: 1825}, test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 25, want: 1825}, test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 27, want: 1971}, test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 27, want: 1971}, test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 37, want: 2701}, test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 37, want: 2701}, test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 41, want: 2993}, test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 41, want: 2993}, test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 45, want: 3285}, test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 45, want: 3285}, test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 73, want: 5329}, test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 73, want: 5329}, test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 81, want: 5913}, test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 81, want: 5913}, test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 3, want: 243}, test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 3, want: 243}, test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 5, want: 405}, test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 5, want: 405}, test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 7, want: 567}, test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 7, want: 567}, test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 9, want: 729}, test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 9, want: 729}, test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 10, want: 810}, test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 10, want: 810}, test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 11, want: 891}, test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 11, want: 891}, test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 13, want: 1053}, test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 13, want: 1053}, test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 19, want: 1539}, test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 19, want: 1539}, test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 21, want: 1701}, test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 21, want: 1701}, test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 25, want: 2025}, test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 25, want: 2025}, test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 27, want: 2187}, test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 27, want: 2187}, test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 37, want: 2997}, test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 37, want: 2997}, test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 41, want: 3321}, test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 41, want: 3321}, test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 45, want: 3645}, test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 45, want: 3645}, test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 73, want: 5913}, test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 73, want: 5913}, test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 81, want: 6561}, test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 81, want: 6561}} type test_int64 struct { fn func(int64) int64 fnname string in int64 want int64 } var tests_int64 = []test_int64{ test_int64{fn: add_Neg9223372036854775808_int64, fnname: "add_Neg9223372036854775808_int64", in: -9223372036854775808, want: 0}, test_int64{fn: add_int64_Neg9223372036854775808, fnname: "add_int64_Neg9223372036854775808", in: -9223372036854775808, want: 0}, test_int64{fn: add_Neg9223372036854775808_int64, fnname: "add_Neg9223372036854775808_int64", in: -9223372036854775807, want: 1}, test_int64{fn: add_int64_Neg9223372036854775808, fnname: "add_int64_Neg9223372036854775808", in: -9223372036854775807, want: 1}, test_int64{fn: add_Neg9223372036854775808_int64, fnname: "add_Neg9223372036854775808_int64", in: -4294967296, want: 9223372032559808512}, test_int64{fn: add_int64_Neg9223372036854775808, fnname: "add_int64_Neg9223372036854775808", in: -4294967296, want: 9223372032559808512}, test_int64{fn: add_Neg9223372036854775808_int64, fnname: "add_Neg9223372036854775808_int64", in: -1, want: 9223372036854775807}, test_int64{fn: add_int64_Neg9223372036854775808, fnname: "add_int64_Neg9223372036854775808", in: -1, want: 9223372036854775807}, test_int64{fn: add_Neg9223372036854775808_int64, fnname: "add_Neg9223372036854775808_int64", in: 0, want: -9223372036854775808}, test_int64{fn: add_int64_Neg9223372036854775808, fnname: "add_int64_Neg9223372036854775808", in: 0, want: -9223372036854775808}, test_int64{fn: add_Neg9223372036854775808_int64, fnname: "add_Neg9223372036854775808_int64", in: 1, want: -9223372036854775807}, test_int64{fn: add_int64_Neg9223372036854775808, fnname: "add_int64_Neg9223372036854775808", in: 1, want: -9223372036854775807}, test_int64{fn: add_Neg9223372036854775808_int64, fnname: "add_Neg9223372036854775808_int64", in: 4294967296, want: -9223372032559808512}, test_int64{fn: add_int64_Neg9223372036854775808, fnname: "add_int64_Neg9223372036854775808", in: 4294967296, want: -9223372032559808512}, test_int64{fn: add_Neg9223372036854775808_int64, fnname: "add_Neg9223372036854775808_int64", in: 9223372036854775806, want: -2}, test_int64{fn: add_int64_Neg9223372036854775808, fnname: "add_int64_Neg9223372036854775808", in: 9223372036854775806, want: -2}, test_int64{fn: add_Neg9223372036854775808_int64, fnname: "add_Neg9223372036854775808_int64", in: 9223372036854775807, want: -1}, test_int64{fn: add_int64_Neg9223372036854775808, fnname: "add_int64_Neg9223372036854775808", in: 9223372036854775807, want: -1}, test_int64{fn: add_Neg9223372036854775807_int64, fnname: "add_Neg9223372036854775807_int64", in: -9223372036854775808, want: 1}, test_int64{fn: add_int64_Neg9223372036854775807, fnname: "add_int64_Neg9223372036854775807", in: -9223372036854775808, want: 1}, test_int64{fn: add_Neg9223372036854775807_int64, fnname: "add_Neg9223372036854775807_int64", in: -9223372036854775807, want: 2}, test_int64{fn: add_int64_Neg9223372036854775807, fnname: "add_int64_Neg9223372036854775807", in: -9223372036854775807, want: 2}, test_int64{fn: add_Neg9223372036854775807_int64, fnname: "add_Neg9223372036854775807_int64", in: -4294967296, want: 9223372032559808513}, test_int64{fn: add_int64_Neg9223372036854775807, fnname: "add_int64_Neg9223372036854775807", in: -4294967296, want: 9223372032559808513}, test_int64{fn: add_Neg9223372036854775807_int64, fnname: "add_Neg9223372036854775807_int64", in: -1, want: -9223372036854775808}, test_int64{fn: add_int64_Neg9223372036854775807, fnname: "add_int64_Neg9223372036854775807", in: -1, want: -9223372036854775808}, test_int64{fn: add_Neg9223372036854775807_int64, fnname: "add_Neg9223372036854775807_int64", in: 0, want: -9223372036854775807}, test_int64{fn: add_int64_Neg9223372036854775807, fnname: "add_int64_Neg9223372036854775807", in: 0, want: -9223372036854775807}, test_int64{fn: add_Neg9223372036854775807_int64, fnname: "add_Neg9223372036854775807_int64", in: 1, want: -9223372036854775806}, test_int64{fn: add_int64_Neg9223372036854775807, fnname: "add_int64_Neg9223372036854775807", in: 1, want: -9223372036854775806}, test_int64{fn: add_Neg9223372036854775807_int64, fnname: "add_Neg9223372036854775807_int64", in: 4294967296, want: -9223372032559808511}, test_int64{fn: add_int64_Neg9223372036854775807, fnname: "add_int64_Neg9223372036854775807", in: 4294967296, want: -9223372032559808511}, test_int64{fn: add_Neg9223372036854775807_int64, fnname: "add_Neg9223372036854775807_int64", in: 9223372036854775806, want: -1}, test_int64{fn: add_int64_Neg9223372036854775807, fnname: "add_int64_Neg9223372036854775807", in: 9223372036854775806, want: -1}, test_int64{fn: add_Neg9223372036854775807_int64, fnname: "add_Neg9223372036854775807_int64", in: 9223372036854775807, want: 0}, test_int64{fn: add_int64_Neg9223372036854775807, fnname: "add_int64_Neg9223372036854775807", in: 9223372036854775807, want: 0}, test_int64{fn: add_Neg4294967296_int64, fnname: "add_Neg4294967296_int64", in: -9223372036854775808, want: 9223372032559808512}, test_int64{fn: add_int64_Neg4294967296, fnname: "add_int64_Neg4294967296", in: -9223372036854775808, want: 9223372032559808512}, test_int64{fn: add_Neg4294967296_int64, fnname: "add_Neg4294967296_int64", in: -9223372036854775807, want: 9223372032559808513}, test_int64{fn: add_int64_Neg4294967296, fnname: "add_int64_Neg4294967296", in: -9223372036854775807, want: 9223372032559808513}, test_int64{fn: add_Neg4294967296_int64, fnname: "add_Neg4294967296_int64", in: -4294967296, want: -8589934592}, test_int64{fn: add_int64_Neg4294967296, fnname: "add_int64_Neg4294967296", in: -4294967296, want: -8589934592}, test_int64{fn: add_Neg4294967296_int64, fnname: "add_Neg4294967296_int64", in: -1, want: -4294967297}, test_int64{fn: add_int64_Neg4294967296, fnname: "add_int64_Neg4294967296", in: -1, want: -4294967297}, test_int64{fn: add_Neg4294967296_int64, fnname: "add_Neg4294967296_int64", in: 0, want: -4294967296}, test_int64{fn: add_int64_Neg4294967296, fnname: "add_int64_Neg4294967296", in: 0, want: -4294967296}, test_int64{fn: add_Neg4294967296_int64, fnname: "add_Neg4294967296_int64", in: 1, want: -4294967295}, test_int64{fn: add_int64_Neg4294967296, fnname: "add_int64_Neg4294967296", in: 1, want: -4294967295}, test_int64{fn: add_Neg4294967296_int64, fnname: "add_Neg4294967296_int64", in: 4294967296, want: 0}, test_int64{fn: add_int64_Neg4294967296, fnname: "add_int64_Neg4294967296", in: 4294967296, want: 0}, test_int64{fn: add_Neg4294967296_int64, fnname: "add_Neg4294967296_int64", in: 9223372036854775806, want: 9223372032559808510}, test_int64{fn: add_int64_Neg4294967296, fnname: "add_int64_Neg4294967296", in: 9223372036854775806, want: 9223372032559808510}, test_int64{fn: add_Neg4294967296_int64, fnname: "add_Neg4294967296_int64", in: 9223372036854775807, want: 9223372032559808511}, test_int64{fn: add_int64_Neg4294967296, fnname: "add_int64_Neg4294967296", in: 9223372036854775807, want: 9223372032559808511}, test_int64{fn: add_Neg1_int64, fnname: "add_Neg1_int64", in: -9223372036854775808, want: 9223372036854775807}, test_int64{fn: add_int64_Neg1, fnname: "add_int64_Neg1", in: -9223372036854775808, want: 9223372036854775807}, test_int64{fn: add_Neg1_int64, fnname: "add_Neg1_int64", in: -9223372036854775807, want: -9223372036854775808}, test_int64{fn: add_int64_Neg1, fnname: "add_int64_Neg1", in: -9223372036854775807, want: -9223372036854775808}, test_int64{fn: add_Neg1_int64, fnname: "add_Neg1_int64", in: -4294967296, want: -4294967297}, test_int64{fn: add_int64_Neg1, fnname: "add_int64_Neg1", in: -4294967296, want: -4294967297}, test_int64{fn: add_Neg1_int64, fnname: "add_Neg1_int64", in: -1, want: -2}, test_int64{fn: add_int64_Neg1, fnname: "add_int64_Neg1", in: -1, want: -2}, test_int64{fn: add_Neg1_int64, fnname: "add_Neg1_int64", in: 0, want: -1}, test_int64{fn: add_int64_Neg1, fnname: "add_int64_Neg1", in: 0, want: -1}, test_int64{fn: add_Neg1_int64, fnname: "add_Neg1_int64", in: 1, want: 0}, test_int64{fn: add_int64_Neg1, fnname: "add_int64_Neg1", in: 1, want: 0}, test_int64{fn: add_Neg1_int64, fnname: "add_Neg1_int64", in: 4294967296, want: 4294967295}, test_int64{fn: add_int64_Neg1, fnname: "add_int64_Neg1", in: 4294967296, want: 4294967295}, test_int64{fn: add_Neg1_int64, fnname: "add_Neg1_int64", in: 9223372036854775806, want: 9223372036854775805}, test_int64{fn: add_int64_Neg1, fnname: "add_int64_Neg1", in: 9223372036854775806, want: 9223372036854775805}, test_int64{fn: add_Neg1_int64, fnname: "add_Neg1_int64", in: 9223372036854775807, want: 9223372036854775806}, test_int64{fn: add_int64_Neg1, fnname: "add_int64_Neg1", in: 9223372036854775807, want: 9223372036854775806}, test_int64{fn: add_0_int64, fnname: "add_0_int64", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: add_int64_0, fnname: "add_int64_0", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: add_0_int64, fnname: "add_0_int64", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: add_int64_0, fnname: "add_int64_0", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: add_0_int64, fnname: "add_0_int64", in: -4294967296, want: -4294967296}, test_int64{fn: add_int64_0, fnname: "add_int64_0", in: -4294967296, want: -4294967296}, test_int64{fn: add_0_int64, fnname: "add_0_int64", in: -1, want: -1}, test_int64{fn: add_int64_0, fnname: "add_int64_0", in: -1, want: -1}, test_int64{fn: add_0_int64, fnname: "add_0_int64", in: 0, want: 0}, test_int64{fn: add_int64_0, fnname: "add_int64_0", in: 0, want: 0}, test_int64{fn: add_0_int64, fnname: "add_0_int64", in: 1, want: 1}, test_int64{fn: add_int64_0, fnname: "add_int64_0", in: 1, want: 1}, test_int64{fn: add_0_int64, fnname: "add_0_int64", in: 4294967296, want: 4294967296}, test_int64{fn: add_int64_0, fnname: "add_int64_0", in: 4294967296, want: 4294967296}, test_int64{fn: add_0_int64, fnname: "add_0_int64", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: add_int64_0, fnname: "add_int64_0", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: add_0_int64, fnname: "add_0_int64", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: add_int64_0, fnname: "add_int64_0", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: add_1_int64, fnname: "add_1_int64", in: -9223372036854775808, want: -9223372036854775807}, test_int64{fn: add_int64_1, fnname: "add_int64_1", in: -9223372036854775808, want: -9223372036854775807}, test_int64{fn: add_1_int64, fnname: "add_1_int64", in: -9223372036854775807, want: -9223372036854775806}, test_int64{fn: add_int64_1, fnname: "add_int64_1", in: -9223372036854775807, want: -9223372036854775806}, test_int64{fn: add_1_int64, fnname: "add_1_int64", in: -4294967296, want: -4294967295}, test_int64{fn: add_int64_1, fnname: "add_int64_1", in: -4294967296, want: -4294967295}, test_int64{fn: add_1_int64, fnname: "add_1_int64", in: -1, want: 0}, test_int64{fn: add_int64_1, fnname: "add_int64_1", in: -1, want: 0}, test_int64{fn: add_1_int64, fnname: "add_1_int64", in: 0, want: 1}, test_int64{fn: add_int64_1, fnname: "add_int64_1", in: 0, want: 1}, test_int64{fn: add_1_int64, fnname: "add_1_int64", in: 1, want: 2}, test_int64{fn: add_int64_1, fnname: "add_int64_1", in: 1, want: 2}, test_int64{fn: add_1_int64, fnname: "add_1_int64", in: 4294967296, want: 4294967297}, test_int64{fn: add_int64_1, fnname: "add_int64_1", in: 4294967296, want: 4294967297}, test_int64{fn: add_1_int64, fnname: "add_1_int64", in: 9223372036854775806, want: 9223372036854775807}, test_int64{fn: add_int64_1, fnname: "add_int64_1", in: 9223372036854775806, want: 9223372036854775807}, test_int64{fn: add_1_int64, fnname: "add_1_int64", in: 9223372036854775807, want: -9223372036854775808}, test_int64{fn: add_int64_1, fnname: "add_int64_1", in: 9223372036854775807, want: -9223372036854775808}, test_int64{fn: add_4294967296_int64, fnname: "add_4294967296_int64", in: -9223372036854775808, want: -9223372032559808512}, test_int64{fn: add_int64_4294967296, fnname: "add_int64_4294967296", in: -9223372036854775808, want: -9223372032559808512}, test_int64{fn: add_4294967296_int64, fnname: "add_4294967296_int64", in: -9223372036854775807, want: -9223372032559808511}, test_int64{fn: add_int64_4294967296, fnname: "add_int64_4294967296", in: -9223372036854775807, want: -9223372032559808511}, test_int64{fn: add_4294967296_int64, fnname: "add_4294967296_int64", in: -4294967296, want: 0}, test_int64{fn: add_int64_4294967296, fnname: "add_int64_4294967296", in: -4294967296, want: 0}, test_int64{fn: add_4294967296_int64, fnname: "add_4294967296_int64", in: -1, want: 4294967295}, test_int64{fn: add_int64_4294967296, fnname: "add_int64_4294967296", in: -1, want: 4294967295}, test_int64{fn: add_4294967296_int64, fnname: "add_4294967296_int64", in: 0, want: 4294967296}, test_int64{fn: add_int64_4294967296, fnname: "add_int64_4294967296", in: 0, want: 4294967296}, test_int64{fn: add_4294967296_int64, fnname: "add_4294967296_int64", in: 1, want: 4294967297}, test_int64{fn: add_int64_4294967296, fnname: "add_int64_4294967296", in: 1, want: 4294967297}, test_int64{fn: add_4294967296_int64, fnname: "add_4294967296_int64", in: 4294967296, want: 8589934592}, test_int64{fn: add_int64_4294967296, fnname: "add_int64_4294967296", in: 4294967296, want: 8589934592}, test_int64{fn: add_4294967296_int64, fnname: "add_4294967296_int64", in: 9223372036854775806, want: -9223372032559808514}, test_int64{fn: add_int64_4294967296, fnname: "add_int64_4294967296", in: 9223372036854775806, want: -9223372032559808514}, test_int64{fn: add_4294967296_int64, fnname: "add_4294967296_int64", in: 9223372036854775807, want: -9223372032559808513}, test_int64{fn: add_int64_4294967296, fnname: "add_int64_4294967296", in: 9223372036854775807, want: -9223372032559808513}, test_int64{fn: add_9223372036854775806_int64, fnname: "add_9223372036854775806_int64", in: -9223372036854775808, want: -2}, test_int64{fn: add_int64_9223372036854775806, fnname: "add_int64_9223372036854775806", in: -9223372036854775808, want: -2}, test_int64{fn: add_9223372036854775806_int64, fnname: "add_9223372036854775806_int64", in: -9223372036854775807, want: -1}, test_int64{fn: add_int64_9223372036854775806, fnname: "add_int64_9223372036854775806", in: -9223372036854775807, want: -1}, test_int64{fn: add_9223372036854775806_int64, fnname: "add_9223372036854775806_int64", in: -4294967296, want: 9223372032559808510}, test_int64{fn: add_int64_9223372036854775806, fnname: "add_int64_9223372036854775806", in: -4294967296, want: 9223372032559808510}, test_int64{fn: add_9223372036854775806_int64, fnname: "add_9223372036854775806_int64", in: -1, want: 9223372036854775805}, test_int64{fn: add_int64_9223372036854775806, fnname: "add_int64_9223372036854775806", in: -1, want: 9223372036854775805}, test_int64{fn: add_9223372036854775806_int64, fnname: "add_9223372036854775806_int64", in: 0, want: 9223372036854775806}, test_int64{fn: add_int64_9223372036854775806, fnname: "add_int64_9223372036854775806", in: 0, want: 9223372036854775806}, test_int64{fn: add_9223372036854775806_int64, fnname: "add_9223372036854775806_int64", in: 1, want: 9223372036854775807}, test_int64{fn: add_int64_9223372036854775806, fnname: "add_int64_9223372036854775806", in: 1, want: 9223372036854775807}, test_int64{fn: add_9223372036854775806_int64, fnname: "add_9223372036854775806_int64", in: 4294967296, want: -9223372032559808514}, test_int64{fn: add_int64_9223372036854775806, fnname: "add_int64_9223372036854775806", in: 4294967296, want: -9223372032559808514}, test_int64{fn: add_9223372036854775806_int64, fnname: "add_9223372036854775806_int64", in: 9223372036854775806, want: -4}, test_int64{fn: add_int64_9223372036854775806, fnname: "add_int64_9223372036854775806", in: 9223372036854775806, want: -4}, test_int64{fn: add_9223372036854775806_int64, fnname: "add_9223372036854775806_int64", in: 9223372036854775807, want: -3}, test_int64{fn: add_int64_9223372036854775806, fnname: "add_int64_9223372036854775806", in: 9223372036854775807, want: -3}, test_int64{fn: add_9223372036854775807_int64, fnname: "add_9223372036854775807_int64", in: -9223372036854775808, want: -1}, test_int64{fn: add_int64_9223372036854775807, fnname: "add_int64_9223372036854775807", in: -9223372036854775808, want: -1}, test_int64{fn: add_9223372036854775807_int64, fnname: "add_9223372036854775807_int64", in: -9223372036854775807, want: 0}, test_int64{fn: add_int64_9223372036854775807, fnname: "add_int64_9223372036854775807", in: -9223372036854775807, want: 0}, test_int64{fn: add_9223372036854775807_int64, fnname: "add_9223372036854775807_int64", in: -4294967296, want: 9223372032559808511}, test_int64{fn: add_int64_9223372036854775807, fnname: "add_int64_9223372036854775807", in: -4294967296, want: 9223372032559808511}, test_int64{fn: add_9223372036854775807_int64, fnname: "add_9223372036854775807_int64", in: -1, want: 9223372036854775806}, test_int64{fn: add_int64_9223372036854775807, fnname: "add_int64_9223372036854775807", in: -1, want: 9223372036854775806}, test_int64{fn: add_9223372036854775807_int64, fnname: "add_9223372036854775807_int64", in: 0, want: 9223372036854775807}, test_int64{fn: add_int64_9223372036854775807, fnname: "add_int64_9223372036854775807", in: 0, want: 9223372036854775807}, test_int64{fn: add_9223372036854775807_int64, fnname: "add_9223372036854775807_int64", in: 1, want: -9223372036854775808}, test_int64{fn: add_int64_9223372036854775807, fnname: "add_int64_9223372036854775807", in: 1, want: -9223372036854775808}, test_int64{fn: add_9223372036854775807_int64, fnname: "add_9223372036854775807_int64", in: 4294967296, want: -9223372032559808513}, test_int64{fn: add_int64_9223372036854775807, fnname: "add_int64_9223372036854775807", in: 4294967296, want: -9223372032559808513}, test_int64{fn: add_9223372036854775807_int64, fnname: "add_9223372036854775807_int64", in: 9223372036854775806, want: -3}, test_int64{fn: add_int64_9223372036854775807, fnname: "add_int64_9223372036854775807", in: 9223372036854775806, want: -3}, test_int64{fn: add_9223372036854775807_int64, fnname: "add_9223372036854775807_int64", in: 9223372036854775807, want: -2}, test_int64{fn: add_int64_9223372036854775807, fnname: "add_int64_9223372036854775807", in: 9223372036854775807, want: -2}, test_int64{fn: sub_Neg9223372036854775808_int64, fnname: "sub_Neg9223372036854775808_int64", in: -9223372036854775808, want: 0}, test_int64{fn: sub_int64_Neg9223372036854775808, fnname: "sub_int64_Neg9223372036854775808", in: -9223372036854775808, want: 0}, test_int64{fn: sub_Neg9223372036854775808_int64, fnname: "sub_Neg9223372036854775808_int64", in: -9223372036854775807, want: -1}, test_int64{fn: sub_int64_Neg9223372036854775808, fnname: "sub_int64_Neg9223372036854775808", in: -9223372036854775807, want: 1}, test_int64{fn: sub_Neg9223372036854775808_int64, fnname: "sub_Neg9223372036854775808_int64", in: -4294967296, want: -9223372032559808512}, test_int64{fn: sub_int64_Neg9223372036854775808, fnname: "sub_int64_Neg9223372036854775808", in: -4294967296, want: 9223372032559808512}, test_int64{fn: sub_Neg9223372036854775808_int64, fnname: "sub_Neg9223372036854775808_int64", in: -1, want: -9223372036854775807}, test_int64{fn: sub_int64_Neg9223372036854775808, fnname: "sub_int64_Neg9223372036854775808", in: -1, want: 9223372036854775807}, test_int64{fn: sub_Neg9223372036854775808_int64, fnname: "sub_Neg9223372036854775808_int64", in: 0, want: -9223372036854775808}, test_int64{fn: sub_int64_Neg9223372036854775808, fnname: "sub_int64_Neg9223372036854775808", in: 0, want: -9223372036854775808}, test_int64{fn: sub_Neg9223372036854775808_int64, fnname: "sub_Neg9223372036854775808_int64", in: 1, want: 9223372036854775807}, test_int64{fn: sub_int64_Neg9223372036854775808, fnname: "sub_int64_Neg9223372036854775808", in: 1, want: -9223372036854775807}, test_int64{fn: sub_Neg9223372036854775808_int64, fnname: "sub_Neg9223372036854775808_int64", in: 4294967296, want: 9223372032559808512}, test_int64{fn: sub_int64_Neg9223372036854775808, fnname: "sub_int64_Neg9223372036854775808", in: 4294967296, want: -9223372032559808512}, test_int64{fn: sub_Neg9223372036854775808_int64, fnname: "sub_Neg9223372036854775808_int64", in: 9223372036854775806, want: 2}, test_int64{fn: sub_int64_Neg9223372036854775808, fnname: "sub_int64_Neg9223372036854775808", in: 9223372036854775806, want: -2}, test_int64{fn: sub_Neg9223372036854775808_int64, fnname: "sub_Neg9223372036854775808_int64", in: 9223372036854775807, want: 1}, test_int64{fn: sub_int64_Neg9223372036854775808, fnname: "sub_int64_Neg9223372036854775808", in: 9223372036854775807, want: -1}, test_int64{fn: sub_Neg9223372036854775807_int64, fnname: "sub_Neg9223372036854775807_int64", in: -9223372036854775808, want: 1}, test_int64{fn: sub_int64_Neg9223372036854775807, fnname: "sub_int64_Neg9223372036854775807", in: -9223372036854775808, want: -1}, test_int64{fn: sub_Neg9223372036854775807_int64, fnname: "sub_Neg9223372036854775807_int64", in: -9223372036854775807, want: 0}, test_int64{fn: sub_int64_Neg9223372036854775807, fnname: "sub_int64_Neg9223372036854775807", in: -9223372036854775807, want: 0}, test_int64{fn: sub_Neg9223372036854775807_int64, fnname: "sub_Neg9223372036854775807_int64", in: -4294967296, want: -9223372032559808511}, test_int64{fn: sub_int64_Neg9223372036854775807, fnname: "sub_int64_Neg9223372036854775807", in: -4294967296, want: 9223372032559808511}, test_int64{fn: sub_Neg9223372036854775807_int64, fnname: "sub_Neg9223372036854775807_int64", in: -1, want: -9223372036854775806}, test_int64{fn: sub_int64_Neg9223372036854775807, fnname: "sub_int64_Neg9223372036854775807", in: -1, want: 9223372036854775806}, test_int64{fn: sub_Neg9223372036854775807_int64, fnname: "sub_Neg9223372036854775807_int64", in: 0, want: -9223372036854775807}, test_int64{fn: sub_int64_Neg9223372036854775807, fnname: "sub_int64_Neg9223372036854775807", in: 0, want: 9223372036854775807}, test_int64{fn: sub_Neg9223372036854775807_int64, fnname: "sub_Neg9223372036854775807_int64", in: 1, want: -9223372036854775808}, test_int64{fn: sub_int64_Neg9223372036854775807, fnname: "sub_int64_Neg9223372036854775807", in: 1, want: -9223372036854775808}, test_int64{fn: sub_Neg9223372036854775807_int64, fnname: "sub_Neg9223372036854775807_int64", in: 4294967296, want: 9223372032559808513}, test_int64{fn: sub_int64_Neg9223372036854775807, fnname: "sub_int64_Neg9223372036854775807", in: 4294967296, want: -9223372032559808513}, test_int64{fn: sub_Neg9223372036854775807_int64, fnname: "sub_Neg9223372036854775807_int64", in: 9223372036854775806, want: 3}, test_int64{fn: sub_int64_Neg9223372036854775807, fnname: "sub_int64_Neg9223372036854775807", in: 9223372036854775806, want: -3}, test_int64{fn: sub_Neg9223372036854775807_int64, fnname: "sub_Neg9223372036854775807_int64", in: 9223372036854775807, want: 2}, test_int64{fn: sub_int64_Neg9223372036854775807, fnname: "sub_int64_Neg9223372036854775807", in: 9223372036854775807, want: -2}, test_int64{fn: sub_Neg4294967296_int64, fnname: "sub_Neg4294967296_int64", in: -9223372036854775808, want: 9223372032559808512}, test_int64{fn: sub_int64_Neg4294967296, fnname: "sub_int64_Neg4294967296", in: -9223372036854775808, want: -9223372032559808512}, test_int64{fn: sub_Neg4294967296_int64, fnname: "sub_Neg4294967296_int64", in: -9223372036854775807, want: 9223372032559808511}, test_int64{fn: sub_int64_Neg4294967296, fnname: "sub_int64_Neg4294967296", in: -9223372036854775807, want: -9223372032559808511}, test_int64{fn: sub_Neg4294967296_int64, fnname: "sub_Neg4294967296_int64", in: -4294967296, want: 0}, test_int64{fn: sub_int64_Neg4294967296, fnname: "sub_int64_Neg4294967296", in: -4294967296, want: 0}, test_int64{fn: sub_Neg4294967296_int64, fnname: "sub_Neg4294967296_int64", in: -1, want: -4294967295}, test_int64{fn: sub_int64_Neg4294967296, fnname: "sub_int64_Neg4294967296", in: -1, want: 4294967295}, test_int64{fn: sub_Neg4294967296_int64, fnname: "sub_Neg4294967296_int64", in: 0, want: -4294967296}, test_int64{fn: sub_int64_Neg4294967296, fnname: "sub_int64_Neg4294967296", in: 0, want: 4294967296}, test_int64{fn: sub_Neg4294967296_int64, fnname: "sub_Neg4294967296_int64", in: 1, want: -4294967297}, test_int64{fn: sub_int64_Neg4294967296, fnname: "sub_int64_Neg4294967296", in: 1, want: 4294967297}, test_int64{fn: sub_Neg4294967296_int64, fnname: "sub_Neg4294967296_int64", in: 4294967296, want: -8589934592}, test_int64{fn: sub_int64_Neg4294967296, fnname: "sub_int64_Neg4294967296", in: 4294967296, want: 8589934592}, test_int64{fn: sub_Neg4294967296_int64, fnname: "sub_Neg4294967296_int64", in: 9223372036854775806, want: 9223372032559808514}, test_int64{fn: sub_int64_Neg4294967296, fnname: "sub_int64_Neg4294967296", in: 9223372036854775806, want: -9223372032559808514}, test_int64{fn: sub_Neg4294967296_int64, fnname: "sub_Neg4294967296_int64", in: 9223372036854775807, want: 9223372032559808513}, test_int64{fn: sub_int64_Neg4294967296, fnname: "sub_int64_Neg4294967296", in: 9223372036854775807, want: -9223372032559808513}, test_int64{fn: sub_Neg1_int64, fnname: "sub_Neg1_int64", in: -9223372036854775808, want: 9223372036854775807}, test_int64{fn: sub_int64_Neg1, fnname: "sub_int64_Neg1", in: -9223372036854775808, want: -9223372036854775807}, test_int64{fn: sub_Neg1_int64, fnname: "sub_Neg1_int64", in: -9223372036854775807, want: 9223372036854775806}, test_int64{fn: sub_int64_Neg1, fnname: "sub_int64_Neg1", in: -9223372036854775807, want: -9223372036854775806}, test_int64{fn: sub_Neg1_int64, fnname: "sub_Neg1_int64", in: -4294967296, want: 4294967295}, test_int64{fn: sub_int64_Neg1, fnname: "sub_int64_Neg1", in: -4294967296, want: -4294967295}, test_int64{fn: sub_Neg1_int64, fnname: "sub_Neg1_int64", in: -1, want: 0}, test_int64{fn: sub_int64_Neg1, fnname: "sub_int64_Neg1", in: -1, want: 0}, test_int64{fn: sub_Neg1_int64, fnname: "sub_Neg1_int64", in: 0, want: -1}, test_int64{fn: sub_int64_Neg1, fnname: "sub_int64_Neg1", in: 0, want: 1}, test_int64{fn: sub_Neg1_int64, fnname: "sub_Neg1_int64", in: 1, want: -2}, test_int64{fn: sub_int64_Neg1, fnname: "sub_int64_Neg1", in: 1, want: 2}, test_int64{fn: sub_Neg1_int64, fnname: "sub_Neg1_int64", in: 4294967296, want: -4294967297}, test_int64{fn: sub_int64_Neg1, fnname: "sub_int64_Neg1", in: 4294967296, want: 4294967297}, test_int64{fn: sub_Neg1_int64, fnname: "sub_Neg1_int64", in: 9223372036854775806, want: -9223372036854775807}, test_int64{fn: sub_int64_Neg1, fnname: "sub_int64_Neg1", in: 9223372036854775806, want: 9223372036854775807}, test_int64{fn: sub_Neg1_int64, fnname: "sub_Neg1_int64", in: 9223372036854775807, want: -9223372036854775808}, test_int64{fn: sub_int64_Neg1, fnname: "sub_int64_Neg1", in: 9223372036854775807, want: -9223372036854775808}, test_int64{fn: sub_0_int64, fnname: "sub_0_int64", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: sub_int64_0, fnname: "sub_int64_0", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: sub_0_int64, fnname: "sub_0_int64", in: -9223372036854775807, want: 9223372036854775807}, test_int64{fn: sub_int64_0, fnname: "sub_int64_0", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: sub_0_int64, fnname: "sub_0_int64", in: -4294967296, want: 4294967296}, test_int64{fn: sub_int64_0, fnname: "sub_int64_0", in: -4294967296, want: -4294967296}, test_int64{fn: sub_0_int64, fnname: "sub_0_int64", in: -1, want: 1}, test_int64{fn: sub_int64_0, fnname: "sub_int64_0", in: -1, want: -1}, test_int64{fn: sub_0_int64, fnname: "sub_0_int64", in: 0, want: 0}, test_int64{fn: sub_int64_0, fnname: "sub_int64_0", in: 0, want: 0}, test_int64{fn: sub_0_int64, fnname: "sub_0_int64", in: 1, want: -1}, test_int64{fn: sub_int64_0, fnname: "sub_int64_0", in: 1, want: 1}, test_int64{fn: sub_0_int64, fnname: "sub_0_int64", in: 4294967296, want: -4294967296}, test_int64{fn: sub_int64_0, fnname: "sub_int64_0", in: 4294967296, want: 4294967296}, test_int64{fn: sub_0_int64, fnname: "sub_0_int64", in: 9223372036854775806, want: -9223372036854775806}, test_int64{fn: sub_int64_0, fnname: "sub_int64_0", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: sub_0_int64, fnname: "sub_0_int64", in: 9223372036854775807, want: -9223372036854775807}, test_int64{fn: sub_int64_0, fnname: "sub_int64_0", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: sub_1_int64, fnname: "sub_1_int64", in: -9223372036854775808, want: -9223372036854775807}, test_int64{fn: sub_int64_1, fnname: "sub_int64_1", in: -9223372036854775808, want: 9223372036854775807}, test_int64{fn: sub_1_int64, fnname: "sub_1_int64", in: -9223372036854775807, want: -9223372036854775808}, test_int64{fn: sub_int64_1, fnname: "sub_int64_1", in: -9223372036854775807, want: -9223372036854775808}, test_int64{fn: sub_1_int64, fnname: "sub_1_int64", in: -4294967296, want: 4294967297}, test_int64{fn: sub_int64_1, fnname: "sub_int64_1", in: -4294967296, want: -4294967297}, test_int64{fn: sub_1_int64, fnname: "sub_1_int64", in: -1, want: 2}, test_int64{fn: sub_int64_1, fnname: "sub_int64_1", in: -1, want: -2}, test_int64{fn: sub_1_int64, fnname: "sub_1_int64", in: 0, want: 1}, test_int64{fn: sub_int64_1, fnname: "sub_int64_1", in: 0, want: -1}, test_int64{fn: sub_1_int64, fnname: "sub_1_int64", in: 1, want: 0}, test_int64{fn: sub_int64_1, fnname: "sub_int64_1", in: 1, want: 0}, test_int64{fn: sub_1_int64, fnname: "sub_1_int64", in: 4294967296, want: -4294967295}, test_int64{fn: sub_int64_1, fnname: "sub_int64_1", in: 4294967296, want: 4294967295}, test_int64{fn: sub_1_int64, fnname: "sub_1_int64", in: 9223372036854775806, want: -9223372036854775805}, test_int64{fn: sub_int64_1, fnname: "sub_int64_1", in: 9223372036854775806, want: 9223372036854775805}, test_int64{fn: sub_1_int64, fnname: "sub_1_int64", in: 9223372036854775807, want: -9223372036854775806}, test_int64{fn: sub_int64_1, fnname: "sub_int64_1", in: 9223372036854775807, want: 9223372036854775806}, test_int64{fn: sub_4294967296_int64, fnname: "sub_4294967296_int64", in: -9223372036854775808, want: -9223372032559808512}, test_int64{fn: sub_int64_4294967296, fnname: "sub_int64_4294967296", in: -9223372036854775808, want: 9223372032559808512}, test_int64{fn: sub_4294967296_int64, fnname: "sub_4294967296_int64", in: -9223372036854775807, want: -9223372032559808513}, test_int64{fn: sub_int64_4294967296, fnname: "sub_int64_4294967296", in: -9223372036854775807, want: 9223372032559808513}, test_int64{fn: sub_4294967296_int64, fnname: "sub_4294967296_int64", in: -4294967296, want: 8589934592}, test_int64{fn: sub_int64_4294967296, fnname: "sub_int64_4294967296", in: -4294967296, want: -8589934592}, test_int64{fn: sub_4294967296_int64, fnname: "sub_4294967296_int64", in: -1, want: 4294967297}, test_int64{fn: sub_int64_4294967296, fnname: "sub_int64_4294967296", in: -1, want: -4294967297}, test_int64{fn: sub_4294967296_int64, fnname: "sub_4294967296_int64", in: 0, want: 4294967296}, test_int64{fn: sub_int64_4294967296, fnname: "sub_int64_4294967296", in: 0, want: -4294967296}, test_int64{fn: sub_4294967296_int64, fnname: "sub_4294967296_int64", in: 1, want: 4294967295}, test_int64{fn: sub_int64_4294967296, fnname: "sub_int64_4294967296", in: 1, want: -4294967295}, test_int64{fn: sub_4294967296_int64, fnname: "sub_4294967296_int64", in: 4294967296, want: 0}, test_int64{fn: sub_int64_4294967296, fnname: "sub_int64_4294967296", in: 4294967296, want: 0}, test_int64{fn: sub_4294967296_int64, fnname: "sub_4294967296_int64", in: 9223372036854775806, want: -9223372032559808510}, test_int64{fn: sub_int64_4294967296, fnname: "sub_int64_4294967296", in: 9223372036854775806, want: 9223372032559808510}, test_int64{fn: sub_4294967296_int64, fnname: "sub_4294967296_int64", in: 9223372036854775807, want: -9223372032559808511}, test_int64{fn: sub_int64_4294967296, fnname: "sub_int64_4294967296", in: 9223372036854775807, want: 9223372032559808511}, test_int64{fn: sub_9223372036854775806_int64, fnname: "sub_9223372036854775806_int64", in: -9223372036854775808, want: -2}, test_int64{fn: sub_int64_9223372036854775806, fnname: "sub_int64_9223372036854775806", in: -9223372036854775808, want: 2}, test_int64{fn: sub_9223372036854775806_int64, fnname: "sub_9223372036854775806_int64", in: -9223372036854775807, want: -3}, test_int64{fn: sub_int64_9223372036854775806, fnname: "sub_int64_9223372036854775806", in: -9223372036854775807, want: 3}, test_int64{fn: sub_9223372036854775806_int64, fnname: "sub_9223372036854775806_int64", in: -4294967296, want: -9223372032559808514}, test_int64{fn: sub_int64_9223372036854775806, fnname: "sub_int64_9223372036854775806", in: -4294967296, want: 9223372032559808514}, test_int64{fn: sub_9223372036854775806_int64, fnname: "sub_9223372036854775806_int64", in: -1, want: 9223372036854775807}, test_int64{fn: sub_int64_9223372036854775806, fnname: "sub_int64_9223372036854775806", in: -1, want: -9223372036854775807}, test_int64{fn: sub_9223372036854775806_int64, fnname: "sub_9223372036854775806_int64", in: 0, want: 9223372036854775806}, test_int64{fn: sub_int64_9223372036854775806, fnname: "sub_int64_9223372036854775806", in: 0, want: -9223372036854775806}, test_int64{fn: sub_9223372036854775806_int64, fnname: "sub_9223372036854775806_int64", in: 1, want: 9223372036854775805}, test_int64{fn: sub_int64_9223372036854775806, fnname: "sub_int64_9223372036854775806", in: 1, want: -9223372036854775805}, test_int64{fn: sub_9223372036854775806_int64, fnname: "sub_9223372036854775806_int64", in: 4294967296, want: 9223372032559808510}, test_int64{fn: sub_int64_9223372036854775806, fnname: "sub_int64_9223372036854775806", in: 4294967296, want: -9223372032559808510}, test_int64{fn: sub_9223372036854775806_int64, fnname: "sub_9223372036854775806_int64", in: 9223372036854775806, want: 0}, test_int64{fn: sub_int64_9223372036854775806, fnname: "sub_int64_9223372036854775806", in: 9223372036854775806, want: 0}, test_int64{fn: sub_9223372036854775806_int64, fnname: "sub_9223372036854775806_int64", in: 9223372036854775807, want: -1}, test_int64{fn: sub_int64_9223372036854775806, fnname: "sub_int64_9223372036854775806", in: 9223372036854775807, want: 1}, test_int64{fn: sub_9223372036854775807_int64, fnname: "sub_9223372036854775807_int64", in: -9223372036854775808, want: -1}, test_int64{fn: sub_int64_9223372036854775807, fnname: "sub_int64_9223372036854775807", in: -9223372036854775808, want: 1}, test_int64{fn: sub_9223372036854775807_int64, fnname: "sub_9223372036854775807_int64", in: -9223372036854775807, want: -2}, test_int64{fn: sub_int64_9223372036854775807, fnname: "sub_int64_9223372036854775807", in: -9223372036854775807, want: 2}, test_int64{fn: sub_9223372036854775807_int64, fnname: "sub_9223372036854775807_int64", in: -4294967296, want: -9223372032559808513}, test_int64{fn: sub_int64_9223372036854775807, fnname: "sub_int64_9223372036854775807", in: -4294967296, want: 9223372032559808513}, test_int64{fn: sub_9223372036854775807_int64, fnname: "sub_9223372036854775807_int64", in: -1, want: -9223372036854775808}, test_int64{fn: sub_int64_9223372036854775807, fnname: "sub_int64_9223372036854775807", in: -1, want: -9223372036854775808}, test_int64{fn: sub_9223372036854775807_int64, fnname: "sub_9223372036854775807_int64", in: 0, want: 9223372036854775807}, test_int64{fn: sub_int64_9223372036854775807, fnname: "sub_int64_9223372036854775807", in: 0, want: -9223372036854775807}, test_int64{fn: sub_9223372036854775807_int64, fnname: "sub_9223372036854775807_int64", in: 1, want: 9223372036854775806}, test_int64{fn: sub_int64_9223372036854775807, fnname: "sub_int64_9223372036854775807", in: 1, want: -9223372036854775806}, test_int64{fn: sub_9223372036854775807_int64, fnname: "sub_9223372036854775807_int64", in: 4294967296, want: 9223372032559808511}, test_int64{fn: sub_int64_9223372036854775807, fnname: "sub_int64_9223372036854775807", in: 4294967296, want: -9223372032559808511}, test_int64{fn: sub_9223372036854775807_int64, fnname: "sub_9223372036854775807_int64", in: 9223372036854775806, want: 1}, test_int64{fn: sub_int64_9223372036854775807, fnname: "sub_int64_9223372036854775807", in: 9223372036854775806, want: -1}, test_int64{fn: sub_9223372036854775807_int64, fnname: "sub_9223372036854775807_int64", in: 9223372036854775807, want: 0}, test_int64{fn: sub_int64_9223372036854775807, fnname: "sub_int64_9223372036854775807", in: 9223372036854775807, want: 0}, test_int64{fn: div_Neg9223372036854775808_int64, fnname: "div_Neg9223372036854775808_int64", in: -9223372036854775808, want: 1}, test_int64{fn: div_int64_Neg9223372036854775808, fnname: "div_int64_Neg9223372036854775808", in: -9223372036854775808, want: 1}, test_int64{fn: div_Neg9223372036854775808_int64, fnname: "div_Neg9223372036854775808_int64", in: -9223372036854775807, want: 1}, test_int64{fn: div_int64_Neg9223372036854775808, fnname: "div_int64_Neg9223372036854775808", in: -9223372036854775807, want: 0}, test_int64{fn: div_Neg9223372036854775808_int64, fnname: "div_Neg9223372036854775808_int64", in: -4294967296, want: 2147483648}, test_int64{fn: div_int64_Neg9223372036854775808, fnname: "div_int64_Neg9223372036854775808", in: -4294967296, want: 0}, test_int64{fn: div_Neg9223372036854775808_int64, fnname: "div_Neg9223372036854775808_int64", in: -1, want: -9223372036854775808}, test_int64{fn: div_int64_Neg9223372036854775808, fnname: "div_int64_Neg9223372036854775808", in: -1, want: 0}, test_int64{fn: div_int64_Neg9223372036854775808, fnname: "div_int64_Neg9223372036854775808", in: 0, want: 0}, test_int64{fn: div_Neg9223372036854775808_int64, fnname: "div_Neg9223372036854775808_int64", in: 1, want: -9223372036854775808}, test_int64{fn: div_int64_Neg9223372036854775808, fnname: "div_int64_Neg9223372036854775808", in: 1, want: 0}, test_int64{fn: div_Neg9223372036854775808_int64, fnname: "div_Neg9223372036854775808_int64", in: 4294967296, want: -2147483648}, test_int64{fn: div_int64_Neg9223372036854775808, fnname: "div_int64_Neg9223372036854775808", in: 4294967296, want: 0}, test_int64{fn: div_Neg9223372036854775808_int64, fnname: "div_Neg9223372036854775808_int64", in: 9223372036854775806, want: -1}, test_int64{fn: div_int64_Neg9223372036854775808, fnname: "div_int64_Neg9223372036854775808", in: 9223372036854775806, want: 0}, test_int64{fn: div_Neg9223372036854775808_int64, fnname: "div_Neg9223372036854775808_int64", in: 9223372036854775807, want: -1}, test_int64{fn: div_int64_Neg9223372036854775808, fnname: "div_int64_Neg9223372036854775808", in: 9223372036854775807, want: 0}, test_int64{fn: div_Neg9223372036854775807_int64, fnname: "div_Neg9223372036854775807_int64", in: -9223372036854775808, want: 0}, test_int64{fn: div_int64_Neg9223372036854775807, fnname: "div_int64_Neg9223372036854775807", in: -9223372036854775808, want: 1}, test_int64{fn: div_Neg9223372036854775807_int64, fnname: "div_Neg9223372036854775807_int64", in: -9223372036854775807, want: 1}, test_int64{fn: div_int64_Neg9223372036854775807, fnname: "div_int64_Neg9223372036854775807", in: -9223372036854775807, want: 1}, test_int64{fn: div_Neg9223372036854775807_int64, fnname: "div_Neg9223372036854775807_int64", in: -4294967296, want: 2147483647}, test_int64{fn: div_int64_Neg9223372036854775807, fnname: "div_int64_Neg9223372036854775807", in: -4294967296, want: 0}, test_int64{fn: div_Neg9223372036854775807_int64, fnname: "div_Neg9223372036854775807_int64", in: -1, want: 9223372036854775807}, test_int64{fn: div_int64_Neg9223372036854775807, fnname: "div_int64_Neg9223372036854775807", in: -1, want: 0}, test_int64{fn: div_int64_Neg9223372036854775807, fnname: "div_int64_Neg9223372036854775807", in: 0, want: 0}, test_int64{fn: div_Neg9223372036854775807_int64, fnname: "div_Neg9223372036854775807_int64", in: 1, want: -9223372036854775807}, test_int64{fn: div_int64_Neg9223372036854775807, fnname: "div_int64_Neg9223372036854775807", in: 1, want: 0}, test_int64{fn: div_Neg9223372036854775807_int64, fnname: "div_Neg9223372036854775807_int64", in: 4294967296, want: -2147483647}, test_int64{fn: div_int64_Neg9223372036854775807, fnname: "div_int64_Neg9223372036854775807", in: 4294967296, want: 0}, test_int64{fn: div_Neg9223372036854775807_int64, fnname: "div_Neg9223372036854775807_int64", in: 9223372036854775806, want: -1}, test_int64{fn: div_int64_Neg9223372036854775807, fnname: "div_int64_Neg9223372036854775807", in: 9223372036854775806, want: 0}, test_int64{fn: div_Neg9223372036854775807_int64, fnname: "div_Neg9223372036854775807_int64", in: 9223372036854775807, want: -1}, test_int64{fn: div_int64_Neg9223372036854775807, fnname: "div_int64_Neg9223372036854775807", in: 9223372036854775807, want: -1}, test_int64{fn: div_Neg4294967296_int64, fnname: "div_Neg4294967296_int64", in: -9223372036854775808, want: 0}, test_int64{fn: div_int64_Neg4294967296, fnname: "div_int64_Neg4294967296", in: -9223372036854775808, want: 2147483648}, test_int64{fn: div_Neg4294967296_int64, fnname: "div_Neg4294967296_int64", in: -9223372036854775807, want: 0}, test_int64{fn: div_int64_Neg4294967296, fnname: "div_int64_Neg4294967296", in: -9223372036854775807, want: 2147483647}, test_int64{fn: div_Neg4294967296_int64, fnname: "div_Neg4294967296_int64", in: -4294967296, want: 1}, test_int64{fn: div_int64_Neg4294967296, fnname: "div_int64_Neg4294967296", in: -4294967296, want: 1}, test_int64{fn: div_Neg4294967296_int64, fnname: "div_Neg4294967296_int64", in: -1, want: 4294967296}, test_int64{fn: div_int64_Neg4294967296, fnname: "div_int64_Neg4294967296", in: -1, want: 0}, test_int64{fn: div_int64_Neg4294967296, fnname: "div_int64_Neg4294967296", in: 0, want: 0}, test_int64{fn: div_Neg4294967296_int64, fnname: "div_Neg4294967296_int64", in: 1, want: -4294967296}, test_int64{fn: div_int64_Neg4294967296, fnname: "div_int64_Neg4294967296", in: 1, want: 0}, test_int64{fn: div_Neg4294967296_int64, fnname: "div_Neg4294967296_int64", in: 4294967296, want: -1}, test_int64{fn: div_int64_Neg4294967296, fnname: "div_int64_Neg4294967296", in: 4294967296, want: -1}, test_int64{fn: div_Neg4294967296_int64, fnname: "div_Neg4294967296_int64", in: 9223372036854775806, want: 0}, test_int64{fn: div_int64_Neg4294967296, fnname: "div_int64_Neg4294967296", in: 9223372036854775806, want: -2147483647}, test_int64{fn: div_Neg4294967296_int64, fnname: "div_Neg4294967296_int64", in: 9223372036854775807, want: 0}, test_int64{fn: div_int64_Neg4294967296, fnname: "div_int64_Neg4294967296", in: 9223372036854775807, want: -2147483647}, test_int64{fn: div_Neg1_int64, fnname: "div_Neg1_int64", in: -9223372036854775808, want: 0}, test_int64{fn: div_int64_Neg1, fnname: "div_int64_Neg1", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: div_Neg1_int64, fnname: "div_Neg1_int64", in: -9223372036854775807, want: 0}, test_int64{fn: div_int64_Neg1, fnname: "div_int64_Neg1", in: -9223372036854775807, want: 9223372036854775807}, test_int64{fn: div_Neg1_int64, fnname: "div_Neg1_int64", in: -4294967296, want: 0}, test_int64{fn: div_int64_Neg1, fnname: "div_int64_Neg1", in: -4294967296, want: 4294967296}, test_int64{fn: div_Neg1_int64, fnname: "div_Neg1_int64", in: -1, want: 1}, test_int64{fn: div_int64_Neg1, fnname: "div_int64_Neg1", in: -1, want: 1}, test_int64{fn: div_int64_Neg1, fnname: "div_int64_Neg1", in: 0, want: 0}, test_int64{fn: div_Neg1_int64, fnname: "div_Neg1_int64", in: 1, want: -1}, test_int64{fn: div_int64_Neg1, fnname: "div_int64_Neg1", in: 1, want: -1}, test_int64{fn: div_Neg1_int64, fnname: "div_Neg1_int64", in: 4294967296, want: 0}, test_int64{fn: div_int64_Neg1, fnname: "div_int64_Neg1", in: 4294967296, want: -4294967296}, test_int64{fn: div_Neg1_int64, fnname: "div_Neg1_int64", in: 9223372036854775806, want: 0}, test_int64{fn: div_int64_Neg1, fnname: "div_int64_Neg1", in: 9223372036854775806, want: -9223372036854775806}, test_int64{fn: div_Neg1_int64, fnname: "div_Neg1_int64", in: 9223372036854775807, want: 0}, test_int64{fn: div_int64_Neg1, fnname: "div_int64_Neg1", in: 9223372036854775807, want: -9223372036854775807}, test_int64{fn: div_0_int64, fnname: "div_0_int64", in: -9223372036854775808, want: 0}, test_int64{fn: div_0_int64, fnname: "div_0_int64", in: -9223372036854775807, want: 0}, test_int64{fn: div_0_int64, fnname: "div_0_int64", in: -4294967296, want: 0}, test_int64{fn: div_0_int64, fnname: "div_0_int64", in: -1, want: 0}, test_int64{fn: div_0_int64, fnname: "div_0_int64", in: 1, want: 0}, test_int64{fn: div_0_int64, fnname: "div_0_int64", in: 4294967296, want: 0}, test_int64{fn: div_0_int64, fnname: "div_0_int64", in: 9223372036854775806, want: 0}, test_int64{fn: div_0_int64, fnname: "div_0_int64", in: 9223372036854775807, want: 0}, test_int64{fn: div_1_int64, fnname: "div_1_int64", in: -9223372036854775808, want: 0}, test_int64{fn: div_int64_1, fnname: "div_int64_1", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: div_1_int64, fnname: "div_1_int64", in: -9223372036854775807, want: 0}, test_int64{fn: div_int64_1, fnname: "div_int64_1", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: div_1_int64, fnname: "div_1_int64", in: -4294967296, want: 0}, test_int64{fn: div_int64_1, fnname: "div_int64_1", in: -4294967296, want: -4294967296}, test_int64{fn: div_1_int64, fnname: "div_1_int64", in: -1, want: -1}, test_int64{fn: div_int64_1, fnname: "div_int64_1", in: -1, want: -1}, test_int64{fn: div_int64_1, fnname: "div_int64_1", in: 0, want: 0}, test_int64{fn: div_1_int64, fnname: "div_1_int64", in: 1, want: 1}, test_int64{fn: div_int64_1, fnname: "div_int64_1", in: 1, want: 1}, test_int64{fn: div_1_int64, fnname: "div_1_int64", in: 4294967296, want: 0}, test_int64{fn: div_int64_1, fnname: "div_int64_1", in: 4294967296, want: 4294967296}, test_int64{fn: div_1_int64, fnname: "div_1_int64", in: 9223372036854775806, want: 0}, test_int64{fn: div_int64_1, fnname: "div_int64_1", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: div_1_int64, fnname: "div_1_int64", in: 9223372036854775807, want: 0}, test_int64{fn: div_int64_1, fnname: "div_int64_1", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: div_4294967296_int64, fnname: "div_4294967296_int64", in: -9223372036854775808, want: 0}, test_int64{fn: div_int64_4294967296, fnname: "div_int64_4294967296", in: -9223372036854775808, want: -2147483648}, test_int64{fn: div_4294967296_int64, fnname: "div_4294967296_int64", in: -9223372036854775807, want: 0}, test_int64{fn: div_int64_4294967296, fnname: "div_int64_4294967296", in: -9223372036854775807, want: -2147483647}, test_int64{fn: div_4294967296_int64, fnname: "div_4294967296_int64", in: -4294967296, want: -1}, test_int64{fn: div_int64_4294967296, fnname: "div_int64_4294967296", in: -4294967296, want: -1}, test_int64{fn: div_4294967296_int64, fnname: "div_4294967296_int64", in: -1, want: -4294967296}, test_int64{fn: div_int64_4294967296, fnname: "div_int64_4294967296", in: -1, want: 0}, test_int64{fn: div_int64_4294967296, fnname: "div_int64_4294967296", in: 0, want: 0}, test_int64{fn: div_4294967296_int64, fnname: "div_4294967296_int64", in: 1, want: 4294967296}, test_int64{fn: div_int64_4294967296, fnname: "div_int64_4294967296", in: 1, want: 0}, test_int64{fn: div_4294967296_int64, fnname: "div_4294967296_int64", in: 4294967296, want: 1}, test_int64{fn: div_int64_4294967296, fnname: "div_int64_4294967296", in: 4294967296, want: 1}, test_int64{fn: div_4294967296_int64, fnname: "div_4294967296_int64", in: 9223372036854775806, want: 0}, test_int64{fn: div_int64_4294967296, fnname: "div_int64_4294967296", in: 9223372036854775806, want: 2147483647}, test_int64{fn: div_4294967296_int64, fnname: "div_4294967296_int64", in: 9223372036854775807, want: 0}, test_int64{fn: div_int64_4294967296, fnname: "div_int64_4294967296", in: 9223372036854775807, want: 2147483647}, test_int64{fn: div_9223372036854775806_int64, fnname: "div_9223372036854775806_int64", in: -9223372036854775808, want: 0}, test_int64{fn: div_int64_9223372036854775806, fnname: "div_int64_9223372036854775806", in: -9223372036854775808, want: -1}, test_int64{fn: div_9223372036854775806_int64, fnname: "div_9223372036854775806_int64", in: -9223372036854775807, want: 0}, test_int64{fn: div_int64_9223372036854775806, fnname: "div_int64_9223372036854775806", in: -9223372036854775807, want: -1}, test_int64{fn: div_9223372036854775806_int64, fnname: "div_9223372036854775806_int64", in: -4294967296, want: -2147483647}, test_int64{fn: div_int64_9223372036854775806, fnname: "div_int64_9223372036854775806", in: -4294967296, want: 0}, test_int64{fn: div_9223372036854775806_int64, fnname: "div_9223372036854775806_int64", in: -1, want: -9223372036854775806}, test_int64{fn: div_int64_9223372036854775806, fnname: "div_int64_9223372036854775806", in: -1, want: 0}, test_int64{fn: div_int64_9223372036854775806, fnname: "div_int64_9223372036854775806", in: 0, want: 0}, test_int64{fn: div_9223372036854775806_int64, fnname: "div_9223372036854775806_int64", in: 1, want: 9223372036854775806}, test_int64{fn: div_int64_9223372036854775806, fnname: "div_int64_9223372036854775806", in: 1, want: 0}, test_int64{fn: div_9223372036854775806_int64, fnname: "div_9223372036854775806_int64", in: 4294967296, want: 2147483647}, test_int64{fn: div_int64_9223372036854775806, fnname: "div_int64_9223372036854775806", in: 4294967296, want: 0}, test_int64{fn: div_9223372036854775806_int64, fnname: "div_9223372036854775806_int64", in: 9223372036854775806, want: 1}, test_int64{fn: div_int64_9223372036854775806, fnname: "div_int64_9223372036854775806", in: 9223372036854775806, want: 1}, test_int64{fn: div_9223372036854775806_int64, fnname: "div_9223372036854775806_int64", in: 9223372036854775807, want: 0}, test_int64{fn: div_int64_9223372036854775806, fnname: "div_int64_9223372036854775806", in: 9223372036854775807, want: 1}, test_int64{fn: div_9223372036854775807_int64, fnname: "div_9223372036854775807_int64", in: -9223372036854775808, want: 0}, test_int64{fn: div_int64_9223372036854775807, fnname: "div_int64_9223372036854775807", in: -9223372036854775808, want: -1}, test_int64{fn: div_9223372036854775807_int64, fnname: "div_9223372036854775807_int64", in: -9223372036854775807, want: -1}, test_int64{fn: div_int64_9223372036854775807, fnname: "div_int64_9223372036854775807", in: -9223372036854775807, want: -1}, test_int64{fn: div_9223372036854775807_int64, fnname: "div_9223372036854775807_int64", in: -4294967296, want: -2147483647}, test_int64{fn: div_int64_9223372036854775807, fnname: "div_int64_9223372036854775807", in: -4294967296, want: 0}, test_int64{fn: div_9223372036854775807_int64, fnname: "div_9223372036854775807_int64", in: -1, want: -9223372036854775807}, test_int64{fn: div_int64_9223372036854775807, fnname: "div_int64_9223372036854775807", in: -1, want: 0}, test_int64{fn: div_int64_9223372036854775807, fnname: "div_int64_9223372036854775807", in: 0, want: 0}, test_int64{fn: div_9223372036854775807_int64, fnname: "div_9223372036854775807_int64", in: 1, want: 9223372036854775807}, test_int64{fn: div_int64_9223372036854775807, fnname: "div_int64_9223372036854775807", in: 1, want: 0}, test_int64{fn: div_9223372036854775807_int64, fnname: "div_9223372036854775807_int64", in: 4294967296, want: 2147483647}, test_int64{fn: div_int64_9223372036854775807, fnname: "div_int64_9223372036854775807", in: 4294967296, want: 0}, test_int64{fn: div_9223372036854775807_int64, fnname: "div_9223372036854775807_int64", in: 9223372036854775806, want: 1}, test_int64{fn: div_int64_9223372036854775807, fnname: "div_int64_9223372036854775807", in: 9223372036854775806, want: 0}, test_int64{fn: div_9223372036854775807_int64, fnname: "div_9223372036854775807_int64", in: 9223372036854775807, want: 1}, test_int64{fn: div_int64_9223372036854775807, fnname: "div_int64_9223372036854775807", in: 9223372036854775807, want: 1}, test_int64{fn: mul_Neg9223372036854775808_int64, fnname: "mul_Neg9223372036854775808_int64", in: -9223372036854775808, want: 0}, test_int64{fn: mul_int64_Neg9223372036854775808, fnname: "mul_int64_Neg9223372036854775808", in: -9223372036854775808, want: 0}, test_int64{fn: mul_Neg9223372036854775808_int64, fnname: "mul_Neg9223372036854775808_int64", in: -9223372036854775807, want: -9223372036854775808}, test_int64{fn: mul_int64_Neg9223372036854775808, fnname: "mul_int64_Neg9223372036854775808", in: -9223372036854775807, want: -9223372036854775808}, test_int64{fn: mul_Neg9223372036854775808_int64, fnname: "mul_Neg9223372036854775808_int64", in: -4294967296, want: 0}, test_int64{fn: mul_int64_Neg9223372036854775808, fnname: "mul_int64_Neg9223372036854775808", in: -4294967296, want: 0}, test_int64{fn: mul_Neg9223372036854775808_int64, fnname: "mul_Neg9223372036854775808_int64", in: -1, want: -9223372036854775808}, test_int64{fn: mul_int64_Neg9223372036854775808, fnname: "mul_int64_Neg9223372036854775808", in: -1, want: -9223372036854775808}, test_int64{fn: mul_Neg9223372036854775808_int64, fnname: "mul_Neg9223372036854775808_int64", in: 0, want: 0}, test_int64{fn: mul_int64_Neg9223372036854775808, fnname: "mul_int64_Neg9223372036854775808", in: 0, want: 0}, test_int64{fn: mul_Neg9223372036854775808_int64, fnname: "mul_Neg9223372036854775808_int64", in: 1, want: -9223372036854775808}, test_int64{fn: mul_int64_Neg9223372036854775808, fnname: "mul_int64_Neg9223372036854775808", in: 1, want: -9223372036854775808}, test_int64{fn: mul_Neg9223372036854775808_int64, fnname: "mul_Neg9223372036854775808_int64", in: 4294967296, want: 0}, test_int64{fn: mul_int64_Neg9223372036854775808, fnname: "mul_int64_Neg9223372036854775808", in: 4294967296, want: 0}, test_int64{fn: mul_Neg9223372036854775808_int64, fnname: "mul_Neg9223372036854775808_int64", in: 9223372036854775806, want: 0}, test_int64{fn: mul_int64_Neg9223372036854775808, fnname: "mul_int64_Neg9223372036854775808", in: 9223372036854775806, want: 0}, test_int64{fn: mul_Neg9223372036854775808_int64, fnname: "mul_Neg9223372036854775808_int64", in: 9223372036854775807, want: -9223372036854775808}, test_int64{fn: mul_int64_Neg9223372036854775808, fnname: "mul_int64_Neg9223372036854775808", in: 9223372036854775807, want: -9223372036854775808}, test_int64{fn: mul_Neg9223372036854775807_int64, fnname: "mul_Neg9223372036854775807_int64", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: mul_int64_Neg9223372036854775807, fnname: "mul_int64_Neg9223372036854775807", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: mul_Neg9223372036854775807_int64, fnname: "mul_Neg9223372036854775807_int64", in: -9223372036854775807, want: 1}, test_int64{fn: mul_int64_Neg9223372036854775807, fnname: "mul_int64_Neg9223372036854775807", in: -9223372036854775807, want: 1}, test_int64{fn: mul_Neg9223372036854775807_int64, fnname: "mul_Neg9223372036854775807_int64", in: -4294967296, want: -4294967296}, test_int64{fn: mul_int64_Neg9223372036854775807, fnname: "mul_int64_Neg9223372036854775807", in: -4294967296, want: -4294967296}, test_int64{fn: mul_Neg9223372036854775807_int64, fnname: "mul_Neg9223372036854775807_int64", in: -1, want: 9223372036854775807}, test_int64{fn: mul_int64_Neg9223372036854775807, fnname: "mul_int64_Neg9223372036854775807", in: -1, want: 9223372036854775807}, test_int64{fn: mul_Neg9223372036854775807_int64, fnname: "mul_Neg9223372036854775807_int64", in: 0, want: 0}, test_int64{fn: mul_int64_Neg9223372036854775807, fnname: "mul_int64_Neg9223372036854775807", in: 0, want: 0}, test_int64{fn: mul_Neg9223372036854775807_int64, fnname: "mul_Neg9223372036854775807_int64", in: 1, want: -9223372036854775807}, test_int64{fn: mul_int64_Neg9223372036854775807, fnname: "mul_int64_Neg9223372036854775807", in: 1, want: -9223372036854775807}, test_int64{fn: mul_Neg9223372036854775807_int64, fnname: "mul_Neg9223372036854775807_int64", in: 4294967296, want: 4294967296}, test_int64{fn: mul_int64_Neg9223372036854775807, fnname: "mul_int64_Neg9223372036854775807", in: 4294967296, want: 4294967296}, test_int64{fn: mul_Neg9223372036854775807_int64, fnname: "mul_Neg9223372036854775807_int64", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: mul_int64_Neg9223372036854775807, fnname: "mul_int64_Neg9223372036854775807", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: mul_Neg9223372036854775807_int64, fnname: "mul_Neg9223372036854775807_int64", in: 9223372036854775807, want: -1}, test_int64{fn: mul_int64_Neg9223372036854775807, fnname: "mul_int64_Neg9223372036854775807", in: 9223372036854775807, want: -1}, test_int64{fn: mul_Neg4294967296_int64, fnname: "mul_Neg4294967296_int64", in: -9223372036854775808, want: 0}, test_int64{fn: mul_int64_Neg4294967296, fnname: "mul_int64_Neg4294967296", in: -9223372036854775808, want: 0}, test_int64{fn: mul_Neg4294967296_int64, fnname: "mul_Neg4294967296_int64", in: -9223372036854775807, want: -4294967296}, test_int64{fn: mul_int64_Neg4294967296, fnname: "mul_int64_Neg4294967296", in: -9223372036854775807, want: -4294967296}, test_int64{fn: mul_Neg4294967296_int64, fnname: "mul_Neg4294967296_int64", in: -4294967296, want: 0}, test_int64{fn: mul_int64_Neg4294967296, fnname: "mul_int64_Neg4294967296", in: -4294967296, want: 0}, test_int64{fn: mul_Neg4294967296_int64, fnname: "mul_Neg4294967296_int64", in: -1, want: 4294967296}, test_int64{fn: mul_int64_Neg4294967296, fnname: "mul_int64_Neg4294967296", in: -1, want: 4294967296}, test_int64{fn: mul_Neg4294967296_int64, fnname: "mul_Neg4294967296_int64", in: 0, want: 0}, test_int64{fn: mul_int64_Neg4294967296, fnname: "mul_int64_Neg4294967296", in: 0, want: 0}, test_int64{fn: mul_Neg4294967296_int64, fnname: "mul_Neg4294967296_int64", in: 1, want: -4294967296}, test_int64{fn: mul_int64_Neg4294967296, fnname: "mul_int64_Neg4294967296", in: 1, want: -4294967296}, test_int64{fn: mul_Neg4294967296_int64, fnname: "mul_Neg4294967296_int64", in: 4294967296, want: 0}, test_int64{fn: mul_int64_Neg4294967296, fnname: "mul_int64_Neg4294967296", in: 4294967296, want: 0}, test_int64{fn: mul_Neg4294967296_int64, fnname: "mul_Neg4294967296_int64", in: 9223372036854775806, want: 8589934592}, test_int64{fn: mul_int64_Neg4294967296, fnname: "mul_int64_Neg4294967296", in: 9223372036854775806, want: 8589934592}, test_int64{fn: mul_Neg4294967296_int64, fnname: "mul_Neg4294967296_int64", in: 9223372036854775807, want: 4294967296}, test_int64{fn: mul_int64_Neg4294967296, fnname: "mul_int64_Neg4294967296", in: 9223372036854775807, want: 4294967296}, test_int64{fn: mul_Neg1_int64, fnname: "mul_Neg1_int64", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: mul_int64_Neg1, fnname: "mul_int64_Neg1", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: mul_Neg1_int64, fnname: "mul_Neg1_int64", in: -9223372036854775807, want: 9223372036854775807}, test_int64{fn: mul_int64_Neg1, fnname: "mul_int64_Neg1", in: -9223372036854775807, want: 9223372036854775807}, test_int64{fn: mul_Neg1_int64, fnname: "mul_Neg1_int64", in: -4294967296, want: 4294967296}, test_int64{fn: mul_int64_Neg1, fnname: "mul_int64_Neg1", in: -4294967296, want: 4294967296}, test_int64{fn: mul_Neg1_int64, fnname: "mul_Neg1_int64", in: -1, want: 1}, test_int64{fn: mul_int64_Neg1, fnname: "mul_int64_Neg1", in: -1, want: 1}, test_int64{fn: mul_Neg1_int64, fnname: "mul_Neg1_int64", in: 0, want: 0}, test_int64{fn: mul_int64_Neg1, fnname: "mul_int64_Neg1", in: 0, want: 0}, test_int64{fn: mul_Neg1_int64, fnname: "mul_Neg1_int64", in: 1, want: -1}, test_int64{fn: mul_int64_Neg1, fnname: "mul_int64_Neg1", in: 1, want: -1}, test_int64{fn: mul_Neg1_int64, fnname: "mul_Neg1_int64", in: 4294967296, want: -4294967296}, test_int64{fn: mul_int64_Neg1, fnname: "mul_int64_Neg1", in: 4294967296, want: -4294967296}, test_int64{fn: mul_Neg1_int64, fnname: "mul_Neg1_int64", in: 9223372036854775806, want: -9223372036854775806}, test_int64{fn: mul_int64_Neg1, fnname: "mul_int64_Neg1", in: 9223372036854775806, want: -9223372036854775806}, test_int64{fn: mul_Neg1_int64, fnname: "mul_Neg1_int64", in: 9223372036854775807, want: -9223372036854775807}, test_int64{fn: mul_int64_Neg1, fnname: "mul_int64_Neg1", in: 9223372036854775807, want: -9223372036854775807}, test_int64{fn: mul_0_int64, fnname: "mul_0_int64", in: -9223372036854775808, want: 0}, test_int64{fn: mul_int64_0, fnname: "mul_int64_0", in: -9223372036854775808, want: 0}, test_int64{fn: mul_0_int64, fnname: "mul_0_int64", in: -9223372036854775807, want: 0}, test_int64{fn: mul_int64_0, fnname: "mul_int64_0", in: -9223372036854775807, want: 0}, test_int64{fn: mul_0_int64, fnname: "mul_0_int64", in: -4294967296, want: 0}, test_int64{fn: mul_int64_0, fnname: "mul_int64_0", in: -4294967296, want: 0}, test_int64{fn: mul_0_int64, fnname: "mul_0_int64", in: -1, want: 0}, test_int64{fn: mul_int64_0, fnname: "mul_int64_0", in: -1, want: 0}, test_int64{fn: mul_0_int64, fnname: "mul_0_int64", in: 0, want: 0}, test_int64{fn: mul_int64_0, fnname: "mul_int64_0", in: 0, want: 0}, test_int64{fn: mul_0_int64, fnname: "mul_0_int64", in: 1, want: 0}, test_int64{fn: mul_int64_0, fnname: "mul_int64_0", in: 1, want: 0}, test_int64{fn: mul_0_int64, fnname: "mul_0_int64", in: 4294967296, want: 0}, test_int64{fn: mul_int64_0, fnname: "mul_int64_0", in: 4294967296, want: 0}, test_int64{fn: mul_0_int64, fnname: "mul_0_int64", in: 9223372036854775806, want: 0}, test_int64{fn: mul_int64_0, fnname: "mul_int64_0", in: 9223372036854775806, want: 0}, test_int64{fn: mul_0_int64, fnname: "mul_0_int64", in: 9223372036854775807, want: 0}, test_int64{fn: mul_int64_0, fnname: "mul_int64_0", in: 9223372036854775807, want: 0}, test_int64{fn: mul_1_int64, fnname: "mul_1_int64", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: mul_int64_1, fnname: "mul_int64_1", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: mul_1_int64, fnname: "mul_1_int64", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: mul_int64_1, fnname: "mul_int64_1", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: mul_1_int64, fnname: "mul_1_int64", in: -4294967296, want: -4294967296}, test_int64{fn: mul_int64_1, fnname: "mul_int64_1", in: -4294967296, want: -4294967296}, test_int64{fn: mul_1_int64, fnname: "mul_1_int64", in: -1, want: -1}, test_int64{fn: mul_int64_1, fnname: "mul_int64_1", in: -1, want: -1}, test_int64{fn: mul_1_int64, fnname: "mul_1_int64", in: 0, want: 0}, test_int64{fn: mul_int64_1, fnname: "mul_int64_1", in: 0, want: 0}, test_int64{fn: mul_1_int64, fnname: "mul_1_int64", in: 1, want: 1}, test_int64{fn: mul_int64_1, fnname: "mul_int64_1", in: 1, want: 1}, test_int64{fn: mul_1_int64, fnname: "mul_1_int64", in: 4294967296, want: 4294967296}, test_int64{fn: mul_int64_1, fnname: "mul_int64_1", in: 4294967296, want: 4294967296}, test_int64{fn: mul_1_int64, fnname: "mul_1_int64", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: mul_int64_1, fnname: "mul_int64_1", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: mul_1_int64, fnname: "mul_1_int64", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: mul_int64_1, fnname: "mul_int64_1", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: mul_4294967296_int64, fnname: "mul_4294967296_int64", in: -9223372036854775808, want: 0}, test_int64{fn: mul_int64_4294967296, fnname: "mul_int64_4294967296", in: -9223372036854775808, want: 0}, test_int64{fn: mul_4294967296_int64, fnname: "mul_4294967296_int64", in: -9223372036854775807, want: 4294967296}, test_int64{fn: mul_int64_4294967296, fnname: "mul_int64_4294967296", in: -9223372036854775807, want: 4294967296}, test_int64{fn: mul_4294967296_int64, fnname: "mul_4294967296_int64", in: -4294967296, want: 0}, test_int64{fn: mul_int64_4294967296, fnname: "mul_int64_4294967296", in: -4294967296, want: 0}, test_int64{fn: mul_4294967296_int64, fnname: "mul_4294967296_int64", in: -1, want: -4294967296}, test_int64{fn: mul_int64_4294967296, fnname: "mul_int64_4294967296", in: -1, want: -4294967296}, test_int64{fn: mul_4294967296_int64, fnname: "mul_4294967296_int64", in: 0, want: 0}, test_int64{fn: mul_int64_4294967296, fnname: "mul_int64_4294967296", in: 0, want: 0}, test_int64{fn: mul_4294967296_int64, fnname: "mul_4294967296_int64", in: 1, want: 4294967296}, test_int64{fn: mul_int64_4294967296, fnname: "mul_int64_4294967296", in: 1, want: 4294967296}, test_int64{fn: mul_4294967296_int64, fnname: "mul_4294967296_int64", in: 4294967296, want: 0}, test_int64{fn: mul_int64_4294967296, fnname: "mul_int64_4294967296", in: 4294967296, want: 0}, test_int64{fn: mul_4294967296_int64, fnname: "mul_4294967296_int64", in: 9223372036854775806, want: -8589934592}, test_int64{fn: mul_int64_4294967296, fnname: "mul_int64_4294967296", in: 9223372036854775806, want: -8589934592}, test_int64{fn: mul_4294967296_int64, fnname: "mul_4294967296_int64", in: 9223372036854775807, want: -4294967296}, test_int64{fn: mul_int64_4294967296, fnname: "mul_int64_4294967296", in: 9223372036854775807, want: -4294967296}, test_int64{fn: mul_9223372036854775806_int64, fnname: "mul_9223372036854775806_int64", in: -9223372036854775808, want: 0}, test_int64{fn: mul_int64_9223372036854775806, fnname: "mul_int64_9223372036854775806", in: -9223372036854775808, want: 0}, test_int64{fn: mul_9223372036854775806_int64, fnname: "mul_9223372036854775806_int64", in: -9223372036854775807, want: 9223372036854775806}, test_int64{fn: mul_int64_9223372036854775806, fnname: "mul_int64_9223372036854775806", in: -9223372036854775807, want: 9223372036854775806}, test_int64{fn: mul_9223372036854775806_int64, fnname: "mul_9223372036854775806_int64", in: -4294967296, want: 8589934592}, test_int64{fn: mul_int64_9223372036854775806, fnname: "mul_int64_9223372036854775806", in: -4294967296, want: 8589934592}, test_int64{fn: mul_9223372036854775806_int64, fnname: "mul_9223372036854775806_int64", in: -1, want: -9223372036854775806}, test_int64{fn: mul_int64_9223372036854775806, fnname: "mul_int64_9223372036854775806", in: -1, want: -9223372036854775806}, test_int64{fn: mul_9223372036854775806_int64, fnname: "mul_9223372036854775806_int64", in: 0, want: 0}, test_int64{fn: mul_int64_9223372036854775806, fnname: "mul_int64_9223372036854775806", in: 0, want: 0}, test_int64{fn: mul_9223372036854775806_int64, fnname: "mul_9223372036854775806_int64", in: 1, want: 9223372036854775806}, test_int64{fn: mul_int64_9223372036854775806, fnname: "mul_int64_9223372036854775806", in: 1, want: 9223372036854775806}, test_int64{fn: mul_9223372036854775806_int64, fnname: "mul_9223372036854775806_int64", in: 4294967296, want: -8589934592}, test_int64{fn: mul_int64_9223372036854775806, fnname: "mul_int64_9223372036854775806", in: 4294967296, want: -8589934592}, test_int64{fn: mul_9223372036854775806_int64, fnname: "mul_9223372036854775806_int64", in: 9223372036854775806, want: 4}, test_int64{fn: mul_int64_9223372036854775806, fnname: "mul_int64_9223372036854775806", in: 9223372036854775806, want: 4}, test_int64{fn: mul_9223372036854775806_int64, fnname: "mul_9223372036854775806_int64", in: 9223372036854775807, want: -9223372036854775806}, test_int64{fn: mul_int64_9223372036854775806, fnname: "mul_int64_9223372036854775806", in: 9223372036854775807, want: -9223372036854775806}, test_int64{fn: mul_9223372036854775807_int64, fnname: "mul_9223372036854775807_int64", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: mul_int64_9223372036854775807, fnname: "mul_int64_9223372036854775807", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: mul_9223372036854775807_int64, fnname: "mul_9223372036854775807_int64", in: -9223372036854775807, want: -1}, test_int64{fn: mul_int64_9223372036854775807, fnname: "mul_int64_9223372036854775807", in: -9223372036854775807, want: -1}, test_int64{fn: mul_9223372036854775807_int64, fnname: "mul_9223372036854775807_int64", in: -4294967296, want: 4294967296}, test_int64{fn: mul_int64_9223372036854775807, fnname: "mul_int64_9223372036854775807", in: -4294967296, want: 4294967296}, test_int64{fn: mul_9223372036854775807_int64, fnname: "mul_9223372036854775807_int64", in: -1, want: -9223372036854775807}, test_int64{fn: mul_int64_9223372036854775807, fnname: "mul_int64_9223372036854775807", in: -1, want: -9223372036854775807}, test_int64{fn: mul_9223372036854775807_int64, fnname: "mul_9223372036854775807_int64", in: 0, want: 0}, test_int64{fn: mul_int64_9223372036854775807, fnname: "mul_int64_9223372036854775807", in: 0, want: 0}, test_int64{fn: mul_9223372036854775807_int64, fnname: "mul_9223372036854775807_int64", in: 1, want: 9223372036854775807}, test_int64{fn: mul_int64_9223372036854775807, fnname: "mul_int64_9223372036854775807", in: 1, want: 9223372036854775807}, test_int64{fn: mul_9223372036854775807_int64, fnname: "mul_9223372036854775807_int64", in: 4294967296, want: -4294967296}, test_int64{fn: mul_int64_9223372036854775807, fnname: "mul_int64_9223372036854775807", in: 4294967296, want: -4294967296}, test_int64{fn: mul_9223372036854775807_int64, fnname: "mul_9223372036854775807_int64", in: 9223372036854775806, want: -9223372036854775806}, test_int64{fn: mul_int64_9223372036854775807, fnname: "mul_int64_9223372036854775807", in: 9223372036854775806, want: -9223372036854775806}, test_int64{fn: mul_9223372036854775807_int64, fnname: "mul_9223372036854775807_int64", in: 9223372036854775807, want: 1}, test_int64{fn: mul_int64_9223372036854775807, fnname: "mul_int64_9223372036854775807", in: 9223372036854775807, want: 1}, test_int64{fn: mod_Neg9223372036854775808_int64, fnname: "mod_Neg9223372036854775808_int64", in: -9223372036854775808, want: 0}, test_int64{fn: mod_int64_Neg9223372036854775808, fnname: "mod_int64_Neg9223372036854775808", in: -9223372036854775808, want: 0}, test_int64{fn: mod_Neg9223372036854775808_int64, fnname: "mod_Neg9223372036854775808_int64", in: -9223372036854775807, want: -1}, test_int64{fn: mod_int64_Neg9223372036854775808, fnname: "mod_int64_Neg9223372036854775808", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: mod_Neg9223372036854775808_int64, fnname: "mod_Neg9223372036854775808_int64", in: -4294967296, want: 0}, test_int64{fn: mod_int64_Neg9223372036854775808, fnname: "mod_int64_Neg9223372036854775808", in: -4294967296, want: -4294967296}, test_int64{fn: mod_Neg9223372036854775808_int64, fnname: "mod_Neg9223372036854775808_int64", in: -1, want: 0}, test_int64{fn: mod_int64_Neg9223372036854775808, fnname: "mod_int64_Neg9223372036854775808", in: -1, want: -1}, test_int64{fn: mod_int64_Neg9223372036854775808, fnname: "mod_int64_Neg9223372036854775808", in: 0, want: 0}, test_int64{fn: mod_Neg9223372036854775808_int64, fnname: "mod_Neg9223372036854775808_int64", in: 1, want: 0}, test_int64{fn: mod_int64_Neg9223372036854775808, fnname: "mod_int64_Neg9223372036854775808", in: 1, want: 1}, test_int64{fn: mod_Neg9223372036854775808_int64, fnname: "mod_Neg9223372036854775808_int64", in: 4294967296, want: 0}, test_int64{fn: mod_int64_Neg9223372036854775808, fnname: "mod_int64_Neg9223372036854775808", in: 4294967296, want: 4294967296}, test_int64{fn: mod_Neg9223372036854775808_int64, fnname: "mod_Neg9223372036854775808_int64", in: 9223372036854775806, want: -2}, test_int64{fn: mod_int64_Neg9223372036854775808, fnname: "mod_int64_Neg9223372036854775808", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: mod_Neg9223372036854775808_int64, fnname: "mod_Neg9223372036854775808_int64", in: 9223372036854775807, want: -1}, test_int64{fn: mod_int64_Neg9223372036854775808, fnname: "mod_int64_Neg9223372036854775808", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: mod_Neg9223372036854775807_int64, fnname: "mod_Neg9223372036854775807_int64", in: -9223372036854775808, want: -9223372036854775807}, test_int64{fn: mod_int64_Neg9223372036854775807, fnname: "mod_int64_Neg9223372036854775807", in: -9223372036854775808, want: -1}, test_int64{fn: mod_Neg9223372036854775807_int64, fnname: "mod_Neg9223372036854775807_int64", in: -9223372036854775807, want: 0}, test_int64{fn: mod_int64_Neg9223372036854775807, fnname: "mod_int64_Neg9223372036854775807", in: -9223372036854775807, want: 0}, test_int64{fn: mod_Neg9223372036854775807_int64, fnname: "mod_Neg9223372036854775807_int64", in: -4294967296, want: -4294967295}, test_int64{fn: mod_int64_Neg9223372036854775807, fnname: "mod_int64_Neg9223372036854775807", in: -4294967296, want: -4294967296}, test_int64{fn: mod_Neg9223372036854775807_int64, fnname: "mod_Neg9223372036854775807_int64", in: -1, want: 0}, test_int64{fn: mod_int64_Neg9223372036854775807, fnname: "mod_int64_Neg9223372036854775807", in: -1, want: -1}, test_int64{fn: mod_int64_Neg9223372036854775807, fnname: "mod_int64_Neg9223372036854775807", in: 0, want: 0}, test_int64{fn: mod_Neg9223372036854775807_int64, fnname: "mod_Neg9223372036854775807_int64", in: 1, want: 0}, test_int64{fn: mod_int64_Neg9223372036854775807, fnname: "mod_int64_Neg9223372036854775807", in: 1, want: 1}, test_int64{fn: mod_Neg9223372036854775807_int64, fnname: "mod_Neg9223372036854775807_int64", in: 4294967296, want: -4294967295}, test_int64{fn: mod_int64_Neg9223372036854775807, fnname: "mod_int64_Neg9223372036854775807", in: 4294967296, want: 4294967296}, test_int64{fn: mod_Neg9223372036854775807_int64, fnname: "mod_Neg9223372036854775807_int64", in: 9223372036854775806, want: -1}, test_int64{fn: mod_int64_Neg9223372036854775807, fnname: "mod_int64_Neg9223372036854775807", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: mod_Neg9223372036854775807_int64, fnname: "mod_Neg9223372036854775807_int64", in: 9223372036854775807, want: 0}, test_int64{fn: mod_int64_Neg9223372036854775807, fnname: "mod_int64_Neg9223372036854775807", in: 9223372036854775807, want: 0}, test_int64{fn: mod_Neg4294967296_int64, fnname: "mod_Neg4294967296_int64", in: -9223372036854775808, want: -4294967296}, test_int64{fn: mod_int64_Neg4294967296, fnname: "mod_int64_Neg4294967296", in: -9223372036854775808, want: 0}, test_int64{fn: mod_Neg4294967296_int64, fnname: "mod_Neg4294967296_int64", in: -9223372036854775807, want: -4294967296}, test_int64{fn: mod_int64_Neg4294967296, fnname: "mod_int64_Neg4294967296", in: -9223372036854775807, want: -4294967295}, test_int64{fn: mod_Neg4294967296_int64, fnname: "mod_Neg4294967296_int64", in: -4294967296, want: 0}, test_int64{fn: mod_int64_Neg4294967296, fnname: "mod_int64_Neg4294967296", in: -4294967296, want: 0}, test_int64{fn: mod_Neg4294967296_int64, fnname: "mod_Neg4294967296_int64", in: -1, want: 0}, test_int64{fn: mod_int64_Neg4294967296, fnname: "mod_int64_Neg4294967296", in: -1, want: -1}, test_int64{fn: mod_int64_Neg4294967296, fnname: "mod_int64_Neg4294967296", in: 0, want: 0}, test_int64{fn: mod_Neg4294967296_int64, fnname: "mod_Neg4294967296_int64", in: 1, want: 0}, test_int64{fn: mod_int64_Neg4294967296, fnname: "mod_int64_Neg4294967296", in: 1, want: 1}, test_int64{fn: mod_Neg4294967296_int64, fnname: "mod_Neg4294967296_int64", in: 4294967296, want: 0}, test_int64{fn: mod_int64_Neg4294967296, fnname: "mod_int64_Neg4294967296", in: 4294967296, want: 0}, test_int64{fn: mod_Neg4294967296_int64, fnname: "mod_Neg4294967296_int64", in: 9223372036854775806, want: -4294967296}, test_int64{fn: mod_int64_Neg4294967296, fnname: "mod_int64_Neg4294967296", in: 9223372036854775806, want: 4294967294}, test_int64{fn: mod_Neg4294967296_int64, fnname: "mod_Neg4294967296_int64", in: 9223372036854775807, want: -4294967296}, test_int64{fn: mod_int64_Neg4294967296, fnname: "mod_int64_Neg4294967296", in: 9223372036854775807, want: 4294967295}, test_int64{fn: mod_Neg1_int64, fnname: "mod_Neg1_int64", in: -9223372036854775808, want: -1}, test_int64{fn: mod_int64_Neg1, fnname: "mod_int64_Neg1", in: -9223372036854775808, want: 0}, test_int64{fn: mod_Neg1_int64, fnname: "mod_Neg1_int64", in: -9223372036854775807, want: -1}, test_int64{fn: mod_int64_Neg1, fnname: "mod_int64_Neg1", in: -9223372036854775807, want: 0}, test_int64{fn: mod_Neg1_int64, fnname: "mod_Neg1_int64", in: -4294967296, want: -1}, test_int64{fn: mod_int64_Neg1, fnname: "mod_int64_Neg1", in: -4294967296, want: 0}, test_int64{fn: mod_Neg1_int64, fnname: "mod_Neg1_int64", in: -1, want: 0}, test_int64{fn: mod_int64_Neg1, fnname: "mod_int64_Neg1", in: -1, want: 0}, test_int64{fn: mod_int64_Neg1, fnname: "mod_int64_Neg1", in: 0, want: 0}, test_int64{fn: mod_Neg1_int64, fnname: "mod_Neg1_int64", in: 1, want: 0}, test_int64{fn: mod_int64_Neg1, fnname: "mod_int64_Neg1", in: 1, want: 0}, test_int64{fn: mod_Neg1_int64, fnname: "mod_Neg1_int64", in: 4294967296, want: -1}, test_int64{fn: mod_int64_Neg1, fnname: "mod_int64_Neg1", in: 4294967296, want: 0}, test_int64{fn: mod_Neg1_int64, fnname: "mod_Neg1_int64", in: 9223372036854775806, want: -1}, test_int64{fn: mod_int64_Neg1, fnname: "mod_int64_Neg1", in: 9223372036854775806, want: 0}, test_int64{fn: mod_Neg1_int64, fnname: "mod_Neg1_int64", in: 9223372036854775807, want: -1}, test_int64{fn: mod_int64_Neg1, fnname: "mod_int64_Neg1", in: 9223372036854775807, want: 0}, test_int64{fn: mod_0_int64, fnname: "mod_0_int64", in: -9223372036854775808, want: 0}, test_int64{fn: mod_0_int64, fnname: "mod_0_int64", in: -9223372036854775807, want: 0}, test_int64{fn: mod_0_int64, fnname: "mod_0_int64", in: -4294967296, want: 0}, test_int64{fn: mod_0_int64, fnname: "mod_0_int64", in: -1, want: 0}, test_int64{fn: mod_0_int64, fnname: "mod_0_int64", in: 1, want: 0}, test_int64{fn: mod_0_int64, fnname: "mod_0_int64", in: 4294967296, want: 0}, test_int64{fn: mod_0_int64, fnname: "mod_0_int64", in: 9223372036854775806, want: 0}, test_int64{fn: mod_0_int64, fnname: "mod_0_int64", in: 9223372036854775807, want: 0}, test_int64{fn: mod_1_int64, fnname: "mod_1_int64", in: -9223372036854775808, want: 1}, test_int64{fn: mod_int64_1, fnname: "mod_int64_1", in: -9223372036854775808, want: 0}, test_int64{fn: mod_1_int64, fnname: "mod_1_int64", in: -9223372036854775807, want: 1}, test_int64{fn: mod_int64_1, fnname: "mod_int64_1", in: -9223372036854775807, want: 0}, test_int64{fn: mod_1_int64, fnname: "mod_1_int64", in: -4294967296, want: 1}, test_int64{fn: mod_int64_1, fnname: "mod_int64_1", in: -4294967296, want: 0}, test_int64{fn: mod_1_int64, fnname: "mod_1_int64", in: -1, want: 0}, test_int64{fn: mod_int64_1, fnname: "mod_int64_1", in: -1, want: 0}, test_int64{fn: mod_int64_1, fnname: "mod_int64_1", in: 0, want: 0}, test_int64{fn: mod_1_int64, fnname: "mod_1_int64", in: 1, want: 0}, test_int64{fn: mod_int64_1, fnname: "mod_int64_1", in: 1, want: 0}, test_int64{fn: mod_1_int64, fnname: "mod_1_int64", in: 4294967296, want: 1}, test_int64{fn: mod_int64_1, fnname: "mod_int64_1", in: 4294967296, want: 0}, test_int64{fn: mod_1_int64, fnname: "mod_1_int64", in: 9223372036854775806, want: 1}, test_int64{fn: mod_int64_1, fnname: "mod_int64_1", in: 9223372036854775806, want: 0}, test_int64{fn: mod_1_int64, fnname: "mod_1_int64", in: 9223372036854775807, want: 1}, test_int64{fn: mod_int64_1, fnname: "mod_int64_1", in: 9223372036854775807, want: 0}, test_int64{fn: mod_4294967296_int64, fnname: "mod_4294967296_int64", in: -9223372036854775808, want: 4294967296}, test_int64{fn: mod_int64_4294967296, fnname: "mod_int64_4294967296", in: -9223372036854775808, want: 0}, test_int64{fn: mod_4294967296_int64, fnname: "mod_4294967296_int64", in: -9223372036854775807, want: 4294967296}, test_int64{fn: mod_int64_4294967296, fnname: "mod_int64_4294967296", in: -9223372036854775807, want: -4294967295}, test_int64{fn: mod_4294967296_int64, fnname: "mod_4294967296_int64", in: -4294967296, want: 0}, test_int64{fn: mod_int64_4294967296, fnname: "mod_int64_4294967296", in: -4294967296, want: 0}, test_int64{fn: mod_4294967296_int64, fnname: "mod_4294967296_int64", in: -1, want: 0}, test_int64{fn: mod_int64_4294967296, fnname: "mod_int64_4294967296", in: -1, want: -1}, test_int64{fn: mod_int64_4294967296, fnname: "mod_int64_4294967296", in: 0, want: 0}, test_int64{fn: mod_4294967296_int64, fnname: "mod_4294967296_int64", in: 1, want: 0}, test_int64{fn: mod_int64_4294967296, fnname: "mod_int64_4294967296", in: 1, want: 1}, test_int64{fn: mod_4294967296_int64, fnname: "mod_4294967296_int64", in: 4294967296, want: 0}, test_int64{fn: mod_int64_4294967296, fnname: "mod_int64_4294967296", in: 4294967296, want: 0}, test_int64{fn: mod_4294967296_int64, fnname: "mod_4294967296_int64", in: 9223372036854775806, want: 4294967296}, test_int64{fn: mod_int64_4294967296, fnname: "mod_int64_4294967296", in: 9223372036854775806, want: 4294967294}, test_int64{fn: mod_4294967296_int64, fnname: "mod_4294967296_int64", in: 9223372036854775807, want: 4294967296}, test_int64{fn: mod_int64_4294967296, fnname: "mod_int64_4294967296", in: 9223372036854775807, want: 4294967295}, test_int64{fn: mod_9223372036854775806_int64, fnname: "mod_9223372036854775806_int64", in: -9223372036854775808, want: 9223372036854775806}, test_int64{fn: mod_int64_9223372036854775806, fnname: "mod_int64_9223372036854775806", in: -9223372036854775808, want: -2}, test_int64{fn: mod_9223372036854775806_int64, fnname: "mod_9223372036854775806_int64", in: -9223372036854775807, want: 9223372036854775806}, test_int64{fn: mod_int64_9223372036854775806, fnname: "mod_int64_9223372036854775806", in: -9223372036854775807, want: -1}, test_int64{fn: mod_9223372036854775806_int64, fnname: "mod_9223372036854775806_int64", in: -4294967296, want: 4294967294}, test_int64{fn: mod_int64_9223372036854775806, fnname: "mod_int64_9223372036854775806", in: -4294967296, want: -4294967296}, test_int64{fn: mod_9223372036854775806_int64, fnname: "mod_9223372036854775806_int64", in: -1, want: 0}, test_int64{fn: mod_int64_9223372036854775806, fnname: "mod_int64_9223372036854775806", in: -1, want: -1}, test_int64{fn: mod_int64_9223372036854775806, fnname: "mod_int64_9223372036854775806", in: 0, want: 0}, test_int64{fn: mod_9223372036854775806_int64, fnname: "mod_9223372036854775806_int64", in: 1, want: 0}, test_int64{fn: mod_int64_9223372036854775806, fnname: "mod_int64_9223372036854775806", in: 1, want: 1}, test_int64{fn: mod_9223372036854775806_int64, fnname: "mod_9223372036854775806_int64", in: 4294967296, want: 4294967294}, test_int64{fn: mod_int64_9223372036854775806, fnname: "mod_int64_9223372036854775806", in: 4294967296, want: 4294967296}, test_int64{fn: mod_9223372036854775806_int64, fnname: "mod_9223372036854775806_int64", in: 9223372036854775806, want: 0}, test_int64{fn: mod_int64_9223372036854775806, fnname: "mod_int64_9223372036854775806", in: 9223372036854775806, want: 0}, test_int64{fn: mod_9223372036854775806_int64, fnname: "mod_9223372036854775806_int64", in: 9223372036854775807, want: 9223372036854775806}, test_int64{fn: mod_int64_9223372036854775806, fnname: "mod_int64_9223372036854775806", in: 9223372036854775807, want: 1}, test_int64{fn: mod_9223372036854775807_int64, fnname: "mod_9223372036854775807_int64", in: -9223372036854775808, want: 9223372036854775807}, test_int64{fn: mod_int64_9223372036854775807, fnname: "mod_int64_9223372036854775807", in: -9223372036854775808, want: -1}, test_int64{fn: mod_9223372036854775807_int64, fnname: "mod_9223372036854775807_int64", in: -9223372036854775807, want: 0}, test_int64{fn: mod_int64_9223372036854775807, fnname: "mod_int64_9223372036854775807", in: -9223372036854775807, want: 0}, test_int64{fn: mod_9223372036854775807_int64, fnname: "mod_9223372036854775807_int64", in: -4294967296, want: 4294967295}, test_int64{fn: mod_int64_9223372036854775807, fnname: "mod_int64_9223372036854775807", in: -4294967296, want: -4294967296}, test_int64{fn: mod_9223372036854775807_int64, fnname: "mod_9223372036854775807_int64", in: -1, want: 0}, test_int64{fn: mod_int64_9223372036854775807, fnname: "mod_int64_9223372036854775807", in: -1, want: -1}, test_int64{fn: mod_int64_9223372036854775807, fnname: "mod_int64_9223372036854775807", in: 0, want: 0}, test_int64{fn: mod_9223372036854775807_int64, fnname: "mod_9223372036854775807_int64", in: 1, want: 0}, test_int64{fn: mod_int64_9223372036854775807, fnname: "mod_int64_9223372036854775807", in: 1, want: 1}, test_int64{fn: mod_9223372036854775807_int64, fnname: "mod_9223372036854775807_int64", in: 4294967296, want: 4294967295}, test_int64{fn: mod_int64_9223372036854775807, fnname: "mod_int64_9223372036854775807", in: 4294967296, want: 4294967296}, test_int64{fn: mod_9223372036854775807_int64, fnname: "mod_9223372036854775807_int64", in: 9223372036854775806, want: 1}, test_int64{fn: mod_int64_9223372036854775807, fnname: "mod_int64_9223372036854775807", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: mod_9223372036854775807_int64, fnname: "mod_9223372036854775807_int64", in: 9223372036854775807, want: 0}, test_int64{fn: mod_int64_9223372036854775807, fnname: "mod_int64_9223372036854775807", in: 9223372036854775807, want: 0}, test_int64{fn: and_Neg9223372036854775808_int64, fnname: "and_Neg9223372036854775808_int64", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: and_int64_Neg9223372036854775808, fnname: "and_int64_Neg9223372036854775808", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: and_Neg9223372036854775808_int64, fnname: "and_Neg9223372036854775808_int64", in: -9223372036854775807, want: -9223372036854775808}, test_int64{fn: and_int64_Neg9223372036854775808, fnname: "and_int64_Neg9223372036854775808", in: -9223372036854775807, want: -9223372036854775808}, test_int64{fn: and_Neg9223372036854775808_int64, fnname: "and_Neg9223372036854775808_int64", in: -4294967296, want: -9223372036854775808}, test_int64{fn: and_int64_Neg9223372036854775808, fnname: "and_int64_Neg9223372036854775808", in: -4294967296, want: -9223372036854775808}, test_int64{fn: and_Neg9223372036854775808_int64, fnname: "and_Neg9223372036854775808_int64", in: -1, want: -9223372036854775808}, test_int64{fn: and_int64_Neg9223372036854775808, fnname: "and_int64_Neg9223372036854775808", in: -1, want: -9223372036854775808}, test_int64{fn: and_Neg9223372036854775808_int64, fnname: "and_Neg9223372036854775808_int64", in: 0, want: 0}, test_int64{fn: and_int64_Neg9223372036854775808, fnname: "and_int64_Neg9223372036854775808", in: 0, want: 0}, test_int64{fn: and_Neg9223372036854775808_int64, fnname: "and_Neg9223372036854775808_int64", in: 1, want: 0}, test_int64{fn: and_int64_Neg9223372036854775808, fnname: "and_int64_Neg9223372036854775808", in: 1, want: 0}, test_int64{fn: and_Neg9223372036854775808_int64, fnname: "and_Neg9223372036854775808_int64", in: 4294967296, want: 0}, test_int64{fn: and_int64_Neg9223372036854775808, fnname: "and_int64_Neg9223372036854775808", in: 4294967296, want: 0}, test_int64{fn: and_Neg9223372036854775808_int64, fnname: "and_Neg9223372036854775808_int64", in: 9223372036854775806, want: 0}, test_int64{fn: and_int64_Neg9223372036854775808, fnname: "and_int64_Neg9223372036854775808", in: 9223372036854775806, want: 0}, test_int64{fn: and_Neg9223372036854775808_int64, fnname: "and_Neg9223372036854775808_int64", in: 9223372036854775807, want: 0}, test_int64{fn: and_int64_Neg9223372036854775808, fnname: "and_int64_Neg9223372036854775808", in: 9223372036854775807, want: 0}, test_int64{fn: and_Neg9223372036854775807_int64, fnname: "and_Neg9223372036854775807_int64", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: and_int64_Neg9223372036854775807, fnname: "and_int64_Neg9223372036854775807", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: and_Neg9223372036854775807_int64, fnname: "and_Neg9223372036854775807_int64", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: and_int64_Neg9223372036854775807, fnname: "and_int64_Neg9223372036854775807", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: and_Neg9223372036854775807_int64, fnname: "and_Neg9223372036854775807_int64", in: -4294967296, want: -9223372036854775808}, test_int64{fn: and_int64_Neg9223372036854775807, fnname: "and_int64_Neg9223372036854775807", in: -4294967296, want: -9223372036854775808}, test_int64{fn: and_Neg9223372036854775807_int64, fnname: "and_Neg9223372036854775807_int64", in: -1, want: -9223372036854775807}, test_int64{fn: and_int64_Neg9223372036854775807, fnname: "and_int64_Neg9223372036854775807", in: -1, want: -9223372036854775807}, test_int64{fn: and_Neg9223372036854775807_int64, fnname: "and_Neg9223372036854775807_int64", in: 0, want: 0}, test_int64{fn: and_int64_Neg9223372036854775807, fnname: "and_int64_Neg9223372036854775807", in: 0, want: 0}, test_int64{fn: and_Neg9223372036854775807_int64, fnname: "and_Neg9223372036854775807_int64", in: 1, want: 1}, test_int64{fn: and_int64_Neg9223372036854775807, fnname: "and_int64_Neg9223372036854775807", in: 1, want: 1}, test_int64{fn: and_Neg9223372036854775807_int64, fnname: "and_Neg9223372036854775807_int64", in: 4294967296, want: 0}, test_int64{fn: and_int64_Neg9223372036854775807, fnname: "and_int64_Neg9223372036854775807", in: 4294967296, want: 0}, test_int64{fn: and_Neg9223372036854775807_int64, fnname: "and_Neg9223372036854775807_int64", in: 9223372036854775806, want: 0}, test_int64{fn: and_int64_Neg9223372036854775807, fnname: "and_int64_Neg9223372036854775807", in: 9223372036854775806, want: 0}, test_int64{fn: and_Neg9223372036854775807_int64, fnname: "and_Neg9223372036854775807_int64", in: 9223372036854775807, want: 1}, test_int64{fn: and_int64_Neg9223372036854775807, fnname: "and_int64_Neg9223372036854775807", in: 9223372036854775807, want: 1}, test_int64{fn: and_Neg4294967296_int64, fnname: "and_Neg4294967296_int64", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: and_int64_Neg4294967296, fnname: "and_int64_Neg4294967296", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: and_Neg4294967296_int64, fnname: "and_Neg4294967296_int64", in: -9223372036854775807, want: -9223372036854775808}, test_int64{fn: and_int64_Neg4294967296, fnname: "and_int64_Neg4294967296", in: -9223372036854775807, want: -9223372036854775808}, test_int64{fn: and_Neg4294967296_int64, fnname: "and_Neg4294967296_int64", in: -4294967296, want: -4294967296}, test_int64{fn: and_int64_Neg4294967296, fnname: "and_int64_Neg4294967296", in: -4294967296, want: -4294967296}, test_int64{fn: and_Neg4294967296_int64, fnname: "and_Neg4294967296_int64", in: -1, want: -4294967296}, test_int64{fn: and_int64_Neg4294967296, fnname: "and_int64_Neg4294967296", in: -1, want: -4294967296}, test_int64{fn: and_Neg4294967296_int64, fnname: "and_Neg4294967296_int64", in: 0, want: 0}, test_int64{fn: and_int64_Neg4294967296, fnname: "and_int64_Neg4294967296", in: 0, want: 0}, test_int64{fn: and_Neg4294967296_int64, fnname: "and_Neg4294967296_int64", in: 1, want: 0}, test_int64{fn: and_int64_Neg4294967296, fnname: "and_int64_Neg4294967296", in: 1, want: 0}, test_int64{fn: and_Neg4294967296_int64, fnname: "and_Neg4294967296_int64", in: 4294967296, want: 4294967296}, test_int64{fn: and_int64_Neg4294967296, fnname: "and_int64_Neg4294967296", in: 4294967296, want: 4294967296}, test_int64{fn: and_Neg4294967296_int64, fnname: "and_Neg4294967296_int64", in: 9223372036854775806, want: 9223372032559808512}, test_int64{fn: and_int64_Neg4294967296, fnname: "and_int64_Neg4294967296", in: 9223372036854775806, want: 9223372032559808512}, test_int64{fn: and_Neg4294967296_int64, fnname: "and_Neg4294967296_int64", in: 9223372036854775807, want: 9223372032559808512}, test_int64{fn: and_int64_Neg4294967296, fnname: "and_int64_Neg4294967296", in: 9223372036854775807, want: 9223372032559808512}, test_int64{fn: and_Neg1_int64, fnname: "and_Neg1_int64", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: and_int64_Neg1, fnname: "and_int64_Neg1", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: and_Neg1_int64, fnname: "and_Neg1_int64", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: and_int64_Neg1, fnname: "and_int64_Neg1", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: and_Neg1_int64, fnname: "and_Neg1_int64", in: -4294967296, want: -4294967296}, test_int64{fn: and_int64_Neg1, fnname: "and_int64_Neg1", in: -4294967296, want: -4294967296}, test_int64{fn: and_Neg1_int64, fnname: "and_Neg1_int64", in: -1, want: -1}, test_int64{fn: and_int64_Neg1, fnname: "and_int64_Neg1", in: -1, want: -1}, test_int64{fn: and_Neg1_int64, fnname: "and_Neg1_int64", in: 0, want: 0}, test_int64{fn: and_int64_Neg1, fnname: "and_int64_Neg1", in: 0, want: 0}, test_int64{fn: and_Neg1_int64, fnname: "and_Neg1_int64", in: 1, want: 1}, test_int64{fn: and_int64_Neg1, fnname: "and_int64_Neg1", in: 1, want: 1}, test_int64{fn: and_Neg1_int64, fnname: "and_Neg1_int64", in: 4294967296, want: 4294967296}, test_int64{fn: and_int64_Neg1, fnname: "and_int64_Neg1", in: 4294967296, want: 4294967296}, test_int64{fn: and_Neg1_int64, fnname: "and_Neg1_int64", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: and_int64_Neg1, fnname: "and_int64_Neg1", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: and_Neg1_int64, fnname: "and_Neg1_int64", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: and_int64_Neg1, fnname: "and_int64_Neg1", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: and_0_int64, fnname: "and_0_int64", in: -9223372036854775808, want: 0}, test_int64{fn: and_int64_0, fnname: "and_int64_0", in: -9223372036854775808, want: 0}, test_int64{fn: and_0_int64, fnname: "and_0_int64", in: -9223372036854775807, want: 0}, test_int64{fn: and_int64_0, fnname: "and_int64_0", in: -9223372036854775807, want: 0}, test_int64{fn: and_0_int64, fnname: "and_0_int64", in: -4294967296, want: 0}, test_int64{fn: and_int64_0, fnname: "and_int64_0", in: -4294967296, want: 0}, test_int64{fn: and_0_int64, fnname: "and_0_int64", in: -1, want: 0}, test_int64{fn: and_int64_0, fnname: "and_int64_0", in: -1, want: 0}, test_int64{fn: and_0_int64, fnname: "and_0_int64", in: 0, want: 0}, test_int64{fn: and_int64_0, fnname: "and_int64_0", in: 0, want: 0}, test_int64{fn: and_0_int64, fnname: "and_0_int64", in: 1, want: 0}, test_int64{fn: and_int64_0, fnname: "and_int64_0", in: 1, want: 0}, test_int64{fn: and_0_int64, fnname: "and_0_int64", in: 4294967296, want: 0}, test_int64{fn: and_int64_0, fnname: "and_int64_0", in: 4294967296, want: 0}, test_int64{fn: and_0_int64, fnname: "and_0_int64", in: 9223372036854775806, want: 0}, test_int64{fn: and_int64_0, fnname: "and_int64_0", in: 9223372036854775806, want: 0}, test_int64{fn: and_0_int64, fnname: "and_0_int64", in: 9223372036854775807, want: 0}, test_int64{fn: and_int64_0, fnname: "and_int64_0", in: 9223372036854775807, want: 0}, test_int64{fn: and_1_int64, fnname: "and_1_int64", in: -9223372036854775808, want: 0}, test_int64{fn: and_int64_1, fnname: "and_int64_1", in: -9223372036854775808, want: 0}, test_int64{fn: and_1_int64, fnname: "and_1_int64", in: -9223372036854775807, want: 1}, test_int64{fn: and_int64_1, fnname: "and_int64_1", in: -9223372036854775807, want: 1}, test_int64{fn: and_1_int64, fnname: "and_1_int64", in: -4294967296, want: 0}, test_int64{fn: and_int64_1, fnname: "and_int64_1", in: -4294967296, want: 0}, test_int64{fn: and_1_int64, fnname: "and_1_int64", in: -1, want: 1}, test_int64{fn: and_int64_1, fnname: "and_int64_1", in: -1, want: 1}, test_int64{fn: and_1_int64, fnname: "and_1_int64", in: 0, want: 0}, test_int64{fn: and_int64_1, fnname: "and_int64_1", in: 0, want: 0}, test_int64{fn: and_1_int64, fnname: "and_1_int64", in: 1, want: 1}, test_int64{fn: and_int64_1, fnname: "and_int64_1", in: 1, want: 1}, test_int64{fn: and_1_int64, fnname: "and_1_int64", in: 4294967296, want: 0}, test_int64{fn: and_int64_1, fnname: "and_int64_1", in: 4294967296, want: 0}, test_int64{fn: and_1_int64, fnname: "and_1_int64", in: 9223372036854775806, want: 0}, test_int64{fn: and_int64_1, fnname: "and_int64_1", in: 9223372036854775806, want: 0}, test_int64{fn: and_1_int64, fnname: "and_1_int64", in: 9223372036854775807, want: 1}, test_int64{fn: and_int64_1, fnname: "and_int64_1", in: 9223372036854775807, want: 1}, test_int64{fn: and_4294967296_int64, fnname: "and_4294967296_int64", in: -9223372036854775808, want: 0}, test_int64{fn: and_int64_4294967296, fnname: "and_int64_4294967296", in: -9223372036854775808, want: 0}, test_int64{fn: and_4294967296_int64, fnname: "and_4294967296_int64", in: -9223372036854775807, want: 0}, test_int64{fn: and_int64_4294967296, fnname: "and_int64_4294967296", in: -9223372036854775807, want: 0}, test_int64{fn: and_4294967296_int64, fnname: "and_4294967296_int64", in: -4294967296, want: 4294967296}, test_int64{fn: and_int64_4294967296, fnname: "and_int64_4294967296", in: -4294967296, want: 4294967296}, test_int64{fn: and_4294967296_int64, fnname: "and_4294967296_int64", in: -1, want: 4294967296}, test_int64{fn: and_int64_4294967296, fnname: "and_int64_4294967296", in: -1, want: 4294967296}, test_int64{fn: and_4294967296_int64, fnname: "and_4294967296_int64", in: 0, want: 0}, test_int64{fn: and_int64_4294967296, fnname: "and_int64_4294967296", in: 0, want: 0}, test_int64{fn: and_4294967296_int64, fnname: "and_4294967296_int64", in: 1, want: 0}, test_int64{fn: and_int64_4294967296, fnname: "and_int64_4294967296", in: 1, want: 0}, test_int64{fn: and_4294967296_int64, fnname: "and_4294967296_int64", in: 4294967296, want: 4294967296}, test_int64{fn: and_int64_4294967296, fnname: "and_int64_4294967296", in: 4294967296, want: 4294967296}, test_int64{fn: and_4294967296_int64, fnname: "and_4294967296_int64", in: 9223372036854775806, want: 4294967296}, test_int64{fn: and_int64_4294967296, fnname: "and_int64_4294967296", in: 9223372036854775806, want: 4294967296}, test_int64{fn: and_4294967296_int64, fnname: "and_4294967296_int64", in: 9223372036854775807, want: 4294967296}, test_int64{fn: and_int64_4294967296, fnname: "and_int64_4294967296", in: 9223372036854775807, want: 4294967296}, test_int64{fn: and_9223372036854775806_int64, fnname: "and_9223372036854775806_int64", in: -9223372036854775808, want: 0}, test_int64{fn: and_int64_9223372036854775806, fnname: "and_int64_9223372036854775806", in: -9223372036854775808, want: 0}, test_int64{fn: and_9223372036854775806_int64, fnname: "and_9223372036854775806_int64", in: -9223372036854775807, want: 0}, test_int64{fn: and_int64_9223372036854775806, fnname: "and_int64_9223372036854775806", in: -9223372036854775807, want: 0}, test_int64{fn: and_9223372036854775806_int64, fnname: "and_9223372036854775806_int64", in: -4294967296, want: 9223372032559808512}, test_int64{fn: and_int64_9223372036854775806, fnname: "and_int64_9223372036854775806", in: -4294967296, want: 9223372032559808512}, test_int64{fn: and_9223372036854775806_int64, fnname: "and_9223372036854775806_int64", in: -1, want: 9223372036854775806}, test_int64{fn: and_int64_9223372036854775806, fnname: "and_int64_9223372036854775806", in: -1, want: 9223372036854775806}, test_int64{fn: and_9223372036854775806_int64, fnname: "and_9223372036854775806_int64", in: 0, want: 0}, test_int64{fn: and_int64_9223372036854775806, fnname: "and_int64_9223372036854775806", in: 0, want: 0}, test_int64{fn: and_9223372036854775806_int64, fnname: "and_9223372036854775806_int64", in: 1, want: 0}, test_int64{fn: and_int64_9223372036854775806, fnname: "and_int64_9223372036854775806", in: 1, want: 0}, test_int64{fn: and_9223372036854775806_int64, fnname: "and_9223372036854775806_int64", in: 4294967296, want: 4294967296}, test_int64{fn: and_int64_9223372036854775806, fnname: "and_int64_9223372036854775806", in: 4294967296, want: 4294967296}, test_int64{fn: and_9223372036854775806_int64, fnname: "and_9223372036854775806_int64", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: and_int64_9223372036854775806, fnname: "and_int64_9223372036854775806", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: and_9223372036854775806_int64, fnname: "and_9223372036854775806_int64", in: 9223372036854775807, want: 9223372036854775806}, test_int64{fn: and_int64_9223372036854775806, fnname: "and_int64_9223372036854775806", in: 9223372036854775807, want: 9223372036854775806}, test_int64{fn: and_9223372036854775807_int64, fnname: "and_9223372036854775807_int64", in: -9223372036854775808, want: 0}, test_int64{fn: and_int64_9223372036854775807, fnname: "and_int64_9223372036854775807", in: -9223372036854775808, want: 0}, test_int64{fn: and_9223372036854775807_int64, fnname: "and_9223372036854775807_int64", in: -9223372036854775807, want: 1}, test_int64{fn: and_int64_9223372036854775807, fnname: "and_int64_9223372036854775807", in: -9223372036854775807, want: 1}, test_int64{fn: and_9223372036854775807_int64, fnname: "and_9223372036854775807_int64", in: -4294967296, want: 9223372032559808512}, test_int64{fn: and_int64_9223372036854775807, fnname: "and_int64_9223372036854775807", in: -4294967296, want: 9223372032559808512}, test_int64{fn: and_9223372036854775807_int64, fnname: "and_9223372036854775807_int64", in: -1, want: 9223372036854775807}, test_int64{fn: and_int64_9223372036854775807, fnname: "and_int64_9223372036854775807", in: -1, want: 9223372036854775807}, test_int64{fn: and_9223372036854775807_int64, fnname: "and_9223372036854775807_int64", in: 0, want: 0}, test_int64{fn: and_int64_9223372036854775807, fnname: "and_int64_9223372036854775807", in: 0, want: 0}, test_int64{fn: and_9223372036854775807_int64, fnname: "and_9223372036854775807_int64", in: 1, want: 1}, test_int64{fn: and_int64_9223372036854775807, fnname: "and_int64_9223372036854775807", in: 1, want: 1}, test_int64{fn: and_9223372036854775807_int64, fnname: "and_9223372036854775807_int64", in: 4294967296, want: 4294967296}, test_int64{fn: and_int64_9223372036854775807, fnname: "and_int64_9223372036854775807", in: 4294967296, want: 4294967296}, test_int64{fn: and_9223372036854775807_int64, fnname: "and_9223372036854775807_int64", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: and_int64_9223372036854775807, fnname: "and_int64_9223372036854775807", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: and_9223372036854775807_int64, fnname: "and_9223372036854775807_int64", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: and_int64_9223372036854775807, fnname: "and_int64_9223372036854775807", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: or_Neg9223372036854775808_int64, fnname: "or_Neg9223372036854775808_int64", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: or_int64_Neg9223372036854775808, fnname: "or_int64_Neg9223372036854775808", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: or_Neg9223372036854775808_int64, fnname: "or_Neg9223372036854775808_int64", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: or_int64_Neg9223372036854775808, fnname: "or_int64_Neg9223372036854775808", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: or_Neg9223372036854775808_int64, fnname: "or_Neg9223372036854775808_int64", in: -4294967296, want: -4294967296}, test_int64{fn: or_int64_Neg9223372036854775808, fnname: "or_int64_Neg9223372036854775808", in: -4294967296, want: -4294967296}, test_int64{fn: or_Neg9223372036854775808_int64, fnname: "or_Neg9223372036854775808_int64", in: -1, want: -1}, test_int64{fn: or_int64_Neg9223372036854775808, fnname: "or_int64_Neg9223372036854775808", in: -1, want: -1}, test_int64{fn: or_Neg9223372036854775808_int64, fnname: "or_Neg9223372036854775808_int64", in: 0, want: -9223372036854775808}, test_int64{fn: or_int64_Neg9223372036854775808, fnname: "or_int64_Neg9223372036854775808", in: 0, want: -9223372036854775808}, test_int64{fn: or_Neg9223372036854775808_int64, fnname: "or_Neg9223372036854775808_int64", in: 1, want: -9223372036854775807}, test_int64{fn: or_int64_Neg9223372036854775808, fnname: "or_int64_Neg9223372036854775808", in: 1, want: -9223372036854775807}, test_int64{fn: or_Neg9223372036854775808_int64, fnname: "or_Neg9223372036854775808_int64", in: 4294967296, want: -9223372032559808512}, test_int64{fn: or_int64_Neg9223372036854775808, fnname: "or_int64_Neg9223372036854775808", in: 4294967296, want: -9223372032559808512}, test_int64{fn: or_Neg9223372036854775808_int64, fnname: "or_Neg9223372036854775808_int64", in: 9223372036854775806, want: -2}, test_int64{fn: or_int64_Neg9223372036854775808, fnname: "or_int64_Neg9223372036854775808", in: 9223372036854775806, want: -2}, test_int64{fn: or_Neg9223372036854775808_int64, fnname: "or_Neg9223372036854775808_int64", in: 9223372036854775807, want: -1}, test_int64{fn: or_int64_Neg9223372036854775808, fnname: "or_int64_Neg9223372036854775808", in: 9223372036854775807, want: -1}, test_int64{fn: or_Neg9223372036854775807_int64, fnname: "or_Neg9223372036854775807_int64", in: -9223372036854775808, want: -9223372036854775807}, test_int64{fn: or_int64_Neg9223372036854775807, fnname: "or_int64_Neg9223372036854775807", in: -9223372036854775808, want: -9223372036854775807}, test_int64{fn: or_Neg9223372036854775807_int64, fnname: "or_Neg9223372036854775807_int64", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: or_int64_Neg9223372036854775807, fnname: "or_int64_Neg9223372036854775807", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: or_Neg9223372036854775807_int64, fnname: "or_Neg9223372036854775807_int64", in: -4294967296, want: -4294967295}, test_int64{fn: or_int64_Neg9223372036854775807, fnname: "or_int64_Neg9223372036854775807", in: -4294967296, want: -4294967295}, test_int64{fn: or_Neg9223372036854775807_int64, fnname: "or_Neg9223372036854775807_int64", in: -1, want: -1}, test_int64{fn: or_int64_Neg9223372036854775807, fnname: "or_int64_Neg9223372036854775807", in: -1, want: -1}, test_int64{fn: or_Neg9223372036854775807_int64, fnname: "or_Neg9223372036854775807_int64", in: 0, want: -9223372036854775807}, test_int64{fn: or_int64_Neg9223372036854775807, fnname: "or_int64_Neg9223372036854775807", in: 0, want: -9223372036854775807}, test_int64{fn: or_Neg9223372036854775807_int64, fnname: "or_Neg9223372036854775807_int64", in: 1, want: -9223372036854775807}, test_int64{fn: or_int64_Neg9223372036854775807, fnname: "or_int64_Neg9223372036854775807", in: 1, want: -9223372036854775807}, test_int64{fn: or_Neg9223372036854775807_int64, fnname: "or_Neg9223372036854775807_int64", in: 4294967296, want: -9223372032559808511}, test_int64{fn: or_int64_Neg9223372036854775807, fnname: "or_int64_Neg9223372036854775807", in: 4294967296, want: -9223372032559808511}, test_int64{fn: or_Neg9223372036854775807_int64, fnname: "or_Neg9223372036854775807_int64", in: 9223372036854775806, want: -1}, test_int64{fn: or_int64_Neg9223372036854775807, fnname: "or_int64_Neg9223372036854775807", in: 9223372036854775806, want: -1}, test_int64{fn: or_Neg9223372036854775807_int64, fnname: "or_Neg9223372036854775807_int64", in: 9223372036854775807, want: -1}, test_int64{fn: or_int64_Neg9223372036854775807, fnname: "or_int64_Neg9223372036854775807", in: 9223372036854775807, want: -1}, test_int64{fn: or_Neg4294967296_int64, fnname: "or_Neg4294967296_int64", in: -9223372036854775808, want: -4294967296}, test_int64{fn: or_int64_Neg4294967296, fnname: "or_int64_Neg4294967296", in: -9223372036854775808, want: -4294967296}, test_int64{fn: or_Neg4294967296_int64, fnname: "or_Neg4294967296_int64", in: -9223372036854775807, want: -4294967295}, test_int64{fn: or_int64_Neg4294967296, fnname: "or_int64_Neg4294967296", in: -9223372036854775807, want: -4294967295}, test_int64{fn: or_Neg4294967296_int64, fnname: "or_Neg4294967296_int64", in: -4294967296, want: -4294967296}, test_int64{fn: or_int64_Neg4294967296, fnname: "or_int64_Neg4294967296", in: -4294967296, want: -4294967296}, test_int64{fn: or_Neg4294967296_int64, fnname: "or_Neg4294967296_int64", in: -1, want: -1}, test_int64{fn: or_int64_Neg4294967296, fnname: "or_int64_Neg4294967296", in: -1, want: -1}, test_int64{fn: or_Neg4294967296_int64, fnname: "or_Neg4294967296_int64", in: 0, want: -4294967296}, test_int64{fn: or_int64_Neg4294967296, fnname: "or_int64_Neg4294967296", in: 0, want: -4294967296}, test_int64{fn: or_Neg4294967296_int64, fnname: "or_Neg4294967296_int64", in: 1, want: -4294967295}, test_int64{fn: or_int64_Neg4294967296, fnname: "or_int64_Neg4294967296", in: 1, want: -4294967295}, test_int64{fn: or_Neg4294967296_int64, fnname: "or_Neg4294967296_int64", in: 4294967296, want: -4294967296}, test_int64{fn: or_int64_Neg4294967296, fnname: "or_int64_Neg4294967296", in: 4294967296, want: -4294967296}, test_int64{fn: or_Neg4294967296_int64, fnname: "or_Neg4294967296_int64", in: 9223372036854775806, want: -2}, test_int64{fn: or_int64_Neg4294967296, fnname: "or_int64_Neg4294967296", in: 9223372036854775806, want: -2}, test_int64{fn: or_Neg4294967296_int64, fnname: "or_Neg4294967296_int64", in: 9223372036854775807, want: -1}, test_int64{fn: or_int64_Neg4294967296, fnname: "or_int64_Neg4294967296", in: 9223372036854775807, want: -1}, test_int64{fn: or_Neg1_int64, fnname: "or_Neg1_int64", in: -9223372036854775808, want: -1}, test_int64{fn: or_int64_Neg1, fnname: "or_int64_Neg1", in: -9223372036854775808, want: -1}, test_int64{fn: or_Neg1_int64, fnname: "or_Neg1_int64", in: -9223372036854775807, want: -1}, test_int64{fn: or_int64_Neg1, fnname: "or_int64_Neg1", in: -9223372036854775807, want: -1}, test_int64{fn: or_Neg1_int64, fnname: "or_Neg1_int64", in: -4294967296, want: -1}, test_int64{fn: or_int64_Neg1, fnname: "or_int64_Neg1", in: -4294967296, want: -1}, test_int64{fn: or_Neg1_int64, fnname: "or_Neg1_int64", in: -1, want: -1}, test_int64{fn: or_int64_Neg1, fnname: "or_int64_Neg1", in: -1, want: -1}, test_int64{fn: or_Neg1_int64, fnname: "or_Neg1_int64", in: 0, want: -1}, test_int64{fn: or_int64_Neg1, fnname: "or_int64_Neg1", in: 0, want: -1}, test_int64{fn: or_Neg1_int64, fnname: "or_Neg1_int64", in: 1, want: -1}, test_int64{fn: or_int64_Neg1, fnname: "or_int64_Neg1", in: 1, want: -1}, test_int64{fn: or_Neg1_int64, fnname: "or_Neg1_int64", in: 4294967296, want: -1}, test_int64{fn: or_int64_Neg1, fnname: "or_int64_Neg1", in: 4294967296, want: -1}, test_int64{fn: or_Neg1_int64, fnname: "or_Neg1_int64", in: 9223372036854775806, want: -1}, test_int64{fn: or_int64_Neg1, fnname: "or_int64_Neg1", in: 9223372036854775806, want: -1}, test_int64{fn: or_Neg1_int64, fnname: "or_Neg1_int64", in: 9223372036854775807, want: -1}, test_int64{fn: or_int64_Neg1, fnname: "or_int64_Neg1", in: 9223372036854775807, want: -1}, test_int64{fn: or_0_int64, fnname: "or_0_int64", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: or_int64_0, fnname: "or_int64_0", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: or_0_int64, fnname: "or_0_int64", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: or_int64_0, fnname: "or_int64_0", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: or_0_int64, fnname: "or_0_int64", in: -4294967296, want: -4294967296}, test_int64{fn: or_int64_0, fnname: "or_int64_0", in: -4294967296, want: -4294967296}, test_int64{fn: or_0_int64, fnname: "or_0_int64", in: -1, want: -1}, test_int64{fn: or_int64_0, fnname: "or_int64_0", in: -1, want: -1}, test_int64{fn: or_0_int64, fnname: "or_0_int64", in: 0, want: 0}, test_int64{fn: or_int64_0, fnname: "or_int64_0", in: 0, want: 0}, test_int64{fn: or_0_int64, fnname: "or_0_int64", in: 1, want: 1}, test_int64{fn: or_int64_0, fnname: "or_int64_0", in: 1, want: 1}, test_int64{fn: or_0_int64, fnname: "or_0_int64", in: 4294967296, want: 4294967296}, test_int64{fn: or_int64_0, fnname: "or_int64_0", in: 4294967296, want: 4294967296}, test_int64{fn: or_0_int64, fnname: "or_0_int64", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: or_int64_0, fnname: "or_int64_0", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: or_0_int64, fnname: "or_0_int64", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: or_int64_0, fnname: "or_int64_0", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: or_1_int64, fnname: "or_1_int64", in: -9223372036854775808, want: -9223372036854775807}, test_int64{fn: or_int64_1, fnname: "or_int64_1", in: -9223372036854775808, want: -9223372036854775807}, test_int64{fn: or_1_int64, fnname: "or_1_int64", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: or_int64_1, fnname: "or_int64_1", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: or_1_int64, fnname: "or_1_int64", in: -4294967296, want: -4294967295}, test_int64{fn: or_int64_1, fnname: "or_int64_1", in: -4294967296, want: -4294967295}, test_int64{fn: or_1_int64, fnname: "or_1_int64", in: -1, want: -1}, test_int64{fn: or_int64_1, fnname: "or_int64_1", in: -1, want: -1}, test_int64{fn: or_1_int64, fnname: "or_1_int64", in: 0, want: 1}, test_int64{fn: or_int64_1, fnname: "or_int64_1", in: 0, want: 1}, test_int64{fn: or_1_int64, fnname: "or_1_int64", in: 1, want: 1}, test_int64{fn: or_int64_1, fnname: "or_int64_1", in: 1, want: 1}, test_int64{fn: or_1_int64, fnname: "or_1_int64", in: 4294967296, want: 4294967297}, test_int64{fn: or_int64_1, fnname: "or_int64_1", in: 4294967296, want: 4294967297}, test_int64{fn: or_1_int64, fnname: "or_1_int64", in: 9223372036854775806, want: 9223372036854775807}, test_int64{fn: or_int64_1, fnname: "or_int64_1", in: 9223372036854775806, want: 9223372036854775807}, test_int64{fn: or_1_int64, fnname: "or_1_int64", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: or_int64_1, fnname: "or_int64_1", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: or_4294967296_int64, fnname: "or_4294967296_int64", in: -9223372036854775808, want: -9223372032559808512}, test_int64{fn: or_int64_4294967296, fnname: "or_int64_4294967296", in: -9223372036854775808, want: -9223372032559808512}, test_int64{fn: or_4294967296_int64, fnname: "or_4294967296_int64", in: -9223372036854775807, want: -9223372032559808511}, test_int64{fn: or_int64_4294967296, fnname: "or_int64_4294967296", in: -9223372036854775807, want: -9223372032559808511}, test_int64{fn: or_4294967296_int64, fnname: "or_4294967296_int64", in: -4294967296, want: -4294967296}, test_int64{fn: or_int64_4294967296, fnname: "or_int64_4294967296", in: -4294967296, want: -4294967296}, test_int64{fn: or_4294967296_int64, fnname: "or_4294967296_int64", in: -1, want: -1}, test_int64{fn: or_int64_4294967296, fnname: "or_int64_4294967296", in: -1, want: -1}, test_int64{fn: or_4294967296_int64, fnname: "or_4294967296_int64", in: 0, want: 4294967296}, test_int64{fn: or_int64_4294967296, fnname: "or_int64_4294967296", in: 0, want: 4294967296}, test_int64{fn: or_4294967296_int64, fnname: "or_4294967296_int64", in: 1, want: 4294967297}, test_int64{fn: or_int64_4294967296, fnname: "or_int64_4294967296", in: 1, want: 4294967297}, test_int64{fn: or_4294967296_int64, fnname: "or_4294967296_int64", in: 4294967296, want: 4294967296}, test_int64{fn: or_int64_4294967296, fnname: "or_int64_4294967296", in: 4294967296, want: 4294967296}, test_int64{fn: or_4294967296_int64, fnname: "or_4294967296_int64", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: or_int64_4294967296, fnname: "or_int64_4294967296", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: or_4294967296_int64, fnname: "or_4294967296_int64", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: or_int64_4294967296, fnname: "or_int64_4294967296", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: or_9223372036854775806_int64, fnname: "or_9223372036854775806_int64", in: -9223372036854775808, want: -2}, test_int64{fn: or_int64_9223372036854775806, fnname: "or_int64_9223372036854775806", in: -9223372036854775808, want: -2}, test_int64{fn: or_9223372036854775806_int64, fnname: "or_9223372036854775806_int64", in: -9223372036854775807, want: -1}, test_int64{fn: or_int64_9223372036854775806, fnname: "or_int64_9223372036854775806", in: -9223372036854775807, want: -1}, test_int64{fn: or_9223372036854775806_int64, fnname: "or_9223372036854775806_int64", in: -4294967296, want: -2}, test_int64{fn: or_int64_9223372036854775806, fnname: "or_int64_9223372036854775806", in: -4294967296, want: -2}, test_int64{fn: or_9223372036854775806_int64, fnname: "or_9223372036854775806_int64", in: -1, want: -1}, test_int64{fn: or_int64_9223372036854775806, fnname: "or_int64_9223372036854775806", in: -1, want: -1}, test_int64{fn: or_9223372036854775806_int64, fnname: "or_9223372036854775806_int64", in: 0, want: 9223372036854775806}, test_int64{fn: or_int64_9223372036854775806, fnname: "or_int64_9223372036854775806", in: 0, want: 9223372036854775806}, test_int64{fn: or_9223372036854775806_int64, fnname: "or_9223372036854775806_int64", in: 1, want: 9223372036854775807}, test_int64{fn: or_int64_9223372036854775806, fnname: "or_int64_9223372036854775806", in: 1, want: 9223372036854775807}, test_int64{fn: or_9223372036854775806_int64, fnname: "or_9223372036854775806_int64", in: 4294967296, want: 9223372036854775806}, test_int64{fn: or_int64_9223372036854775806, fnname: "or_int64_9223372036854775806", in: 4294967296, want: 9223372036854775806}, test_int64{fn: or_9223372036854775806_int64, fnname: "or_9223372036854775806_int64", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: or_int64_9223372036854775806, fnname: "or_int64_9223372036854775806", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: or_9223372036854775806_int64, fnname: "or_9223372036854775806_int64", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: or_int64_9223372036854775806, fnname: "or_int64_9223372036854775806", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: or_9223372036854775807_int64, fnname: "or_9223372036854775807_int64", in: -9223372036854775808, want: -1}, test_int64{fn: or_int64_9223372036854775807, fnname: "or_int64_9223372036854775807", in: -9223372036854775808, want: -1}, test_int64{fn: or_9223372036854775807_int64, fnname: "or_9223372036854775807_int64", in: -9223372036854775807, want: -1}, test_int64{fn: or_int64_9223372036854775807, fnname: "or_int64_9223372036854775807", in: -9223372036854775807, want: -1}, test_int64{fn: or_9223372036854775807_int64, fnname: "or_9223372036854775807_int64", in: -4294967296, want: -1}, test_int64{fn: or_int64_9223372036854775807, fnname: "or_int64_9223372036854775807", in: -4294967296, want: -1}, test_int64{fn: or_9223372036854775807_int64, fnname: "or_9223372036854775807_int64", in: -1, want: -1}, test_int64{fn: or_int64_9223372036854775807, fnname: "or_int64_9223372036854775807", in: -1, want: -1}, test_int64{fn: or_9223372036854775807_int64, fnname: "or_9223372036854775807_int64", in: 0, want: 9223372036854775807}, test_int64{fn: or_int64_9223372036854775807, fnname: "or_int64_9223372036854775807", in: 0, want: 9223372036854775807}, test_int64{fn: or_9223372036854775807_int64, fnname: "or_9223372036854775807_int64", in: 1, want: 9223372036854775807}, test_int64{fn: or_int64_9223372036854775807, fnname: "or_int64_9223372036854775807", in: 1, want: 9223372036854775807}, test_int64{fn: or_9223372036854775807_int64, fnname: "or_9223372036854775807_int64", in: 4294967296, want: 9223372036854775807}, test_int64{fn: or_int64_9223372036854775807, fnname: "or_int64_9223372036854775807", in: 4294967296, want: 9223372036854775807}, test_int64{fn: or_9223372036854775807_int64, fnname: "or_9223372036854775807_int64", in: 9223372036854775806, want: 9223372036854775807}, test_int64{fn: or_int64_9223372036854775807, fnname: "or_int64_9223372036854775807", in: 9223372036854775806, want: 9223372036854775807}, test_int64{fn: or_9223372036854775807_int64, fnname: "or_9223372036854775807_int64", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: or_int64_9223372036854775807, fnname: "or_int64_9223372036854775807", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: xor_Neg9223372036854775808_int64, fnname: "xor_Neg9223372036854775808_int64", in: -9223372036854775808, want: 0}, test_int64{fn: xor_int64_Neg9223372036854775808, fnname: "xor_int64_Neg9223372036854775808", in: -9223372036854775808, want: 0}, test_int64{fn: xor_Neg9223372036854775808_int64, fnname: "xor_Neg9223372036854775808_int64", in: -9223372036854775807, want: 1}, test_int64{fn: xor_int64_Neg9223372036854775808, fnname: "xor_int64_Neg9223372036854775808", in: -9223372036854775807, want: 1}, test_int64{fn: xor_Neg9223372036854775808_int64, fnname: "xor_Neg9223372036854775808_int64", in: -4294967296, want: 9223372032559808512}, test_int64{fn: xor_int64_Neg9223372036854775808, fnname: "xor_int64_Neg9223372036854775808", in: -4294967296, want: 9223372032559808512}, test_int64{fn: xor_Neg9223372036854775808_int64, fnname: "xor_Neg9223372036854775808_int64", in: -1, want: 9223372036854775807}, test_int64{fn: xor_int64_Neg9223372036854775808, fnname: "xor_int64_Neg9223372036854775808", in: -1, want: 9223372036854775807}, test_int64{fn: xor_Neg9223372036854775808_int64, fnname: "xor_Neg9223372036854775808_int64", in: 0, want: -9223372036854775808}, test_int64{fn: xor_int64_Neg9223372036854775808, fnname: "xor_int64_Neg9223372036854775808", in: 0, want: -9223372036854775808}, test_int64{fn: xor_Neg9223372036854775808_int64, fnname: "xor_Neg9223372036854775808_int64", in: 1, want: -9223372036854775807}, test_int64{fn: xor_int64_Neg9223372036854775808, fnname: "xor_int64_Neg9223372036854775808", in: 1, want: -9223372036854775807}, test_int64{fn: xor_Neg9223372036854775808_int64, fnname: "xor_Neg9223372036854775808_int64", in: 4294967296, want: -9223372032559808512}, test_int64{fn: xor_int64_Neg9223372036854775808, fnname: "xor_int64_Neg9223372036854775808", in: 4294967296, want: -9223372032559808512}, test_int64{fn: xor_Neg9223372036854775808_int64, fnname: "xor_Neg9223372036854775808_int64", in: 9223372036854775806, want: -2}, test_int64{fn: xor_int64_Neg9223372036854775808, fnname: "xor_int64_Neg9223372036854775808", in: 9223372036854775806, want: -2}, test_int64{fn: xor_Neg9223372036854775808_int64, fnname: "xor_Neg9223372036854775808_int64", in: 9223372036854775807, want: -1}, test_int64{fn: xor_int64_Neg9223372036854775808, fnname: "xor_int64_Neg9223372036854775808", in: 9223372036854775807, want: -1}, test_int64{fn: xor_Neg9223372036854775807_int64, fnname: "xor_Neg9223372036854775807_int64", in: -9223372036854775808, want: 1}, test_int64{fn: xor_int64_Neg9223372036854775807, fnname: "xor_int64_Neg9223372036854775807", in: -9223372036854775808, want: 1}, test_int64{fn: xor_Neg9223372036854775807_int64, fnname: "xor_Neg9223372036854775807_int64", in: -9223372036854775807, want: 0}, test_int64{fn: xor_int64_Neg9223372036854775807, fnname: "xor_int64_Neg9223372036854775807", in: -9223372036854775807, want: 0}, test_int64{fn: xor_Neg9223372036854775807_int64, fnname: "xor_Neg9223372036854775807_int64", in: -4294967296, want: 9223372032559808513}, test_int64{fn: xor_int64_Neg9223372036854775807, fnname: "xor_int64_Neg9223372036854775807", in: -4294967296, want: 9223372032559808513}, test_int64{fn: xor_Neg9223372036854775807_int64, fnname: "xor_Neg9223372036854775807_int64", in: -1, want: 9223372036854775806}, test_int64{fn: xor_int64_Neg9223372036854775807, fnname: "xor_int64_Neg9223372036854775807", in: -1, want: 9223372036854775806}, test_int64{fn: xor_Neg9223372036854775807_int64, fnname: "xor_Neg9223372036854775807_int64", in: 0, want: -9223372036854775807}, test_int64{fn: xor_int64_Neg9223372036854775807, fnname: "xor_int64_Neg9223372036854775807", in: 0, want: -9223372036854775807}, test_int64{fn: xor_Neg9223372036854775807_int64, fnname: "xor_Neg9223372036854775807_int64", in: 1, want: -9223372036854775808}, test_int64{fn: xor_int64_Neg9223372036854775807, fnname: "xor_int64_Neg9223372036854775807", in: 1, want: -9223372036854775808}, test_int64{fn: xor_Neg9223372036854775807_int64, fnname: "xor_Neg9223372036854775807_int64", in: 4294967296, want: -9223372032559808511}, test_int64{fn: xor_int64_Neg9223372036854775807, fnname: "xor_int64_Neg9223372036854775807", in: 4294967296, want: -9223372032559808511}, test_int64{fn: xor_Neg9223372036854775807_int64, fnname: "xor_Neg9223372036854775807_int64", in: 9223372036854775806, want: -1}, test_int64{fn: xor_int64_Neg9223372036854775807, fnname: "xor_int64_Neg9223372036854775807", in: 9223372036854775806, want: -1}, test_int64{fn: xor_Neg9223372036854775807_int64, fnname: "xor_Neg9223372036854775807_int64", in: 9223372036854775807, want: -2}, test_int64{fn: xor_int64_Neg9223372036854775807, fnname: "xor_int64_Neg9223372036854775807", in: 9223372036854775807, want: -2}, test_int64{fn: xor_Neg4294967296_int64, fnname: "xor_Neg4294967296_int64", in: -9223372036854775808, want: 9223372032559808512}, test_int64{fn: xor_int64_Neg4294967296, fnname: "xor_int64_Neg4294967296", in: -9223372036854775808, want: 9223372032559808512}, test_int64{fn: xor_Neg4294967296_int64, fnname: "xor_Neg4294967296_int64", in: -9223372036854775807, want: 9223372032559808513}, test_int64{fn: xor_int64_Neg4294967296, fnname: "xor_int64_Neg4294967296", in: -9223372036854775807, want: 9223372032559808513}, test_int64{fn: xor_Neg4294967296_int64, fnname: "xor_Neg4294967296_int64", in: -4294967296, want: 0}, test_int64{fn: xor_int64_Neg4294967296, fnname: "xor_int64_Neg4294967296", in: -4294967296, want: 0}, test_int64{fn: xor_Neg4294967296_int64, fnname: "xor_Neg4294967296_int64", in: -1, want: 4294967295}, test_int64{fn: xor_int64_Neg4294967296, fnname: "xor_int64_Neg4294967296", in: -1, want: 4294967295}, test_int64{fn: xor_Neg4294967296_int64, fnname: "xor_Neg4294967296_int64", in: 0, want: -4294967296}, test_int64{fn: xor_int64_Neg4294967296, fnname: "xor_int64_Neg4294967296", in: 0, want: -4294967296}, test_int64{fn: xor_Neg4294967296_int64, fnname: "xor_Neg4294967296_int64", in: 1, want: -4294967295}, test_int64{fn: xor_int64_Neg4294967296, fnname: "xor_int64_Neg4294967296", in: 1, want: -4294967295}, test_int64{fn: xor_Neg4294967296_int64, fnname: "xor_Neg4294967296_int64", in: 4294967296, want: -8589934592}, test_int64{fn: xor_int64_Neg4294967296, fnname: "xor_int64_Neg4294967296", in: 4294967296, want: -8589934592}, test_int64{fn: xor_Neg4294967296_int64, fnname: "xor_Neg4294967296_int64", in: 9223372036854775806, want: -9223372032559808514}, test_int64{fn: xor_int64_Neg4294967296, fnname: "xor_int64_Neg4294967296", in: 9223372036854775806, want: -9223372032559808514}, test_int64{fn: xor_Neg4294967296_int64, fnname: "xor_Neg4294967296_int64", in: 9223372036854775807, want: -9223372032559808513}, test_int64{fn: xor_int64_Neg4294967296, fnname: "xor_int64_Neg4294967296", in: 9223372036854775807, want: -9223372032559808513}, test_int64{fn: xor_Neg1_int64, fnname: "xor_Neg1_int64", in: -9223372036854775808, want: 9223372036854775807}, test_int64{fn: xor_int64_Neg1, fnname: "xor_int64_Neg1", in: -9223372036854775808, want: 9223372036854775807}, test_int64{fn: xor_Neg1_int64, fnname: "xor_Neg1_int64", in: -9223372036854775807, want: 9223372036854775806}, test_int64{fn: xor_int64_Neg1, fnname: "xor_int64_Neg1", in: -9223372036854775807, want: 9223372036854775806}, test_int64{fn: xor_Neg1_int64, fnname: "xor_Neg1_int64", in: -4294967296, want: 4294967295}, test_int64{fn: xor_int64_Neg1, fnname: "xor_int64_Neg1", in: -4294967296, want: 4294967295}, test_int64{fn: xor_Neg1_int64, fnname: "xor_Neg1_int64", in: -1, want: 0}, test_int64{fn: xor_int64_Neg1, fnname: "xor_int64_Neg1", in: -1, want: 0}, test_int64{fn: xor_Neg1_int64, fnname: "xor_Neg1_int64", in: 0, want: -1}, test_int64{fn: xor_int64_Neg1, fnname: "xor_int64_Neg1", in: 0, want: -1}, test_int64{fn: xor_Neg1_int64, fnname: "xor_Neg1_int64", in: 1, want: -2}, test_int64{fn: xor_int64_Neg1, fnname: "xor_int64_Neg1", in: 1, want: -2}, test_int64{fn: xor_Neg1_int64, fnname: "xor_Neg1_int64", in: 4294967296, want: -4294967297}, test_int64{fn: xor_int64_Neg1, fnname: "xor_int64_Neg1", in: 4294967296, want: -4294967297}, test_int64{fn: xor_Neg1_int64, fnname: "xor_Neg1_int64", in: 9223372036854775806, want: -9223372036854775807}, test_int64{fn: xor_int64_Neg1, fnname: "xor_int64_Neg1", in: 9223372036854775806, want: -9223372036854775807}, test_int64{fn: xor_Neg1_int64, fnname: "xor_Neg1_int64", in: 9223372036854775807, want: -9223372036854775808}, test_int64{fn: xor_int64_Neg1, fnname: "xor_int64_Neg1", in: 9223372036854775807, want: -9223372036854775808}, test_int64{fn: xor_0_int64, fnname: "xor_0_int64", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: xor_int64_0, fnname: "xor_int64_0", in: -9223372036854775808, want: -9223372036854775808}, test_int64{fn: xor_0_int64, fnname: "xor_0_int64", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: xor_int64_0, fnname: "xor_int64_0", in: -9223372036854775807, want: -9223372036854775807}, test_int64{fn: xor_0_int64, fnname: "xor_0_int64", in: -4294967296, want: -4294967296}, test_int64{fn: xor_int64_0, fnname: "xor_int64_0", in: -4294967296, want: -4294967296}, test_int64{fn: xor_0_int64, fnname: "xor_0_int64", in: -1, want: -1}, test_int64{fn: xor_int64_0, fnname: "xor_int64_0", in: -1, want: -1}, test_int64{fn: xor_0_int64, fnname: "xor_0_int64", in: 0, want: 0}, test_int64{fn: xor_int64_0, fnname: "xor_int64_0", in: 0, want: 0}, test_int64{fn: xor_0_int64, fnname: "xor_0_int64", in: 1, want: 1}, test_int64{fn: xor_int64_0, fnname: "xor_int64_0", in: 1, want: 1}, test_int64{fn: xor_0_int64, fnname: "xor_0_int64", in: 4294967296, want: 4294967296}, test_int64{fn: xor_int64_0, fnname: "xor_int64_0", in: 4294967296, want: 4294967296}, test_int64{fn: xor_0_int64, fnname: "xor_0_int64", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: xor_int64_0, fnname: "xor_int64_0", in: 9223372036854775806, want: 9223372036854775806}, test_int64{fn: xor_0_int64, fnname: "xor_0_int64", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: xor_int64_0, fnname: "xor_int64_0", in: 9223372036854775807, want: 9223372036854775807}, test_int64{fn: xor_1_int64, fnname: "xor_1_int64", in: -9223372036854775808, want: -9223372036854775807}, test_int64{fn: xor_int64_1, fnname: "xor_int64_1", in: -9223372036854775808, want: -9223372036854775807}, test_int64{fn: xor_1_int64, fnname: "xor_1_int64", in: -9223372036854775807, want: -9223372036854775808}, test_int64{fn: xor_int64_1, fnname: "xor_int64_1", in: -9223372036854775807, want: -9223372036854775808}, test_int64{fn: xor_1_int64, fnname: "xor_1_int64", in: -4294967296, want: -4294967295}, test_int64{fn: xor_int64_1, fnname: "xor_int64_1", in: -4294967296, want: -4294967295}, test_int64{fn: xor_1_int64, fnname: "xor_1_int64", in: -1, want: -2}, test_int64{fn: xor_int64_1, fnname: "xor_int64_1", in: -1, want: -2}, test_int64{fn: xor_1_int64, fnname: "xor_1_int64", in: 0, want: 1}, test_int64{fn: xor_int64_1, fnname: "xor_int64_1", in: 0, want: 1}, test_int64{fn: xor_1_int64, fnname: "xor_1_int64", in: 1, want: 0}, test_int64{fn: xor_int64_1, fnname: "xor_int64_1", in: 1, want: 0}, test_int64{fn: xor_1_int64, fnname: "xor_1_int64", in: 4294967296, want: 4294967297}, test_int64{fn: xor_int64_1, fnname: "xor_int64_1", in: 4294967296, want: 4294967297}, test_int64{fn: xor_1_int64, fnname: "xor_1_int64", in: 9223372036854775806, want: 9223372036854775807}, test_int64{fn: xor_int64_1, fnname: "xor_int64_1", in: 9223372036854775806, want: 9223372036854775807}, test_int64{fn: xor_1_int64, fnname: "xor_1_int64", in: 9223372036854775807, want: 9223372036854775806}, test_int64{fn: xor_int64_1, fnname: "xor_int64_1", in: 9223372036854775807, want: 9223372036854775806}, test_int64{fn: xor_4294967296_int64, fnname: "xor_4294967296_int64", in: -9223372036854775808, want: -9223372032559808512}, test_int64{fn: xor_int64_4294967296, fnname: "xor_int64_4294967296", in: -9223372036854775808, want: -9223372032559808512}, test_int64{fn: xor_4294967296_int64, fnname: "xor_4294967296_int64", in: -9223372036854775807, want: -9223372032559808511}, test_int64{fn: xor_int64_4294967296, fnname: "xor_int64_4294967296", in: -9223372036854775807, want: -9223372032559808511}, test_int64{fn: xor_4294967296_int64, fnname: "xor_4294967296_int64", in: -4294967296, want: -8589934592}, test_int64{fn: xor_int64_4294967296, fnname: "xor_int64_4294967296", in: -4294967296, want: -8589934592}, test_int64{fn: xor_4294967296_int64, fnname: "xor_4294967296_int64", in: -1, want: -4294967297}, test_int64{fn: xor_int64_4294967296, fnname: "xor_int64_4294967296", in: -1, want: -4294967297}, test_int64{fn: xor_4294967296_int64, fnname: "xor_4294967296_int64", in: 0, want: 4294967296}, test_int64{fn: xor_int64_4294967296, fnname: "xor_int64_4294967296", in: 0, want: 4294967296}, test_int64{fn: xor_4294967296_int64, fnname: "xor_4294967296_int64", in: 1, want: 4294967297}, test_int64{fn: xor_int64_4294967296, fnname: "xor_int64_4294967296", in: 1, want: 4294967297}, test_int64{fn: xor_4294967296_int64, fnname: "xor_4294967296_int64", in: 4294967296, want: 0}, test_int64{fn: xor_int64_4294967296, fnname: "xor_int64_4294967296", in: 4294967296, want: 0}, test_int64{fn: xor_4294967296_int64, fnname: "xor_4294967296_int64", in: 9223372036854775806, want: 9223372032559808510}, test_int64{fn: xor_int64_4294967296, fnname: "xor_int64_4294967296", in: 9223372036854775806, want: 9223372032559808510}, test_int64{fn: xor_4294967296_int64, fnname: "xor_4294967296_int64", in: 9223372036854775807, want: 9223372032559808511}, test_int64{fn: xor_int64_4294967296, fnname: "xor_int64_4294967296", in: 9223372036854775807, want: 9223372032559808511}, test_int64{fn: xor_9223372036854775806_int64, fnname: "xor_9223372036854775806_int64", in: -9223372036854775808, want: -2}, test_int64{fn: xor_int64_9223372036854775806, fnname: "xor_int64_9223372036854775806", in: -9223372036854775808, want: -2}, test_int64{fn: xor_9223372036854775806_int64, fnname: "xor_9223372036854775806_int64", in: -9223372036854775807, want: -1}, test_int64{fn: xor_int64_9223372036854775806, fnname: "xor_int64_9223372036854775806", in: -9223372036854775807, want: -1}, test_int64{fn: xor_9223372036854775806_int64, fnname: "xor_9223372036854775806_int64", in: -4294967296, want: -9223372032559808514}, test_int64{fn: xor_int64_9223372036854775806, fnname: "xor_int64_9223372036854775806", in: -4294967296, want: -9223372032559808514}, test_int64{fn: xor_9223372036854775806_int64, fnname: "xor_9223372036854775806_int64", in: -1, want: -9223372036854775807}, test_int64{fn: xor_int64_9223372036854775806, fnname: "xor_int64_9223372036854775806", in: -1, want: -9223372036854775807}, test_int64{fn: xor_9223372036854775806_int64, fnname: "xor_9223372036854775806_int64", in: 0, want: 9223372036854775806}, test_int64{fn: xor_int64_9223372036854775806, fnname: "xor_int64_9223372036854775806", in: 0, want: 9223372036854775806}, test_int64{fn: xor_9223372036854775806_int64, fnname: "xor_9223372036854775806_int64", in: 1, want: 9223372036854775807}, test_int64{fn: xor_int64_9223372036854775806, fnname: "xor_int64_9223372036854775806", in: 1, want: 9223372036854775807}, test_int64{fn: xor_9223372036854775806_int64, fnname: "xor_9223372036854775806_int64", in: 4294967296, want: 9223372032559808510}, test_int64{fn: xor_int64_9223372036854775806, fnname: "xor_int64_9223372036854775806", in: 4294967296, want: 9223372032559808510}, test_int64{fn: xor_9223372036854775806_int64, fnname: "xor_9223372036854775806_int64", in: 9223372036854775806, want: 0}, test_int64{fn: xor_int64_9223372036854775806, fnname: "xor_int64_9223372036854775806", in: 9223372036854775806, want: 0}, test_int64{fn: xor_9223372036854775806_int64, fnname: "xor_9223372036854775806_int64", in: 9223372036854775807, want: 1}, test_int64{fn: xor_int64_9223372036854775806, fnname: "xor_int64_9223372036854775806", in: 9223372036854775807, want: 1}, test_int64{fn: xor_9223372036854775807_int64, fnname: "xor_9223372036854775807_int64", in: -9223372036854775808, want: -1}, test_int64{fn: xor_int64_9223372036854775807, fnname: "xor_int64_9223372036854775807", in: -9223372036854775808, want: -1}, test_int64{fn: xor_9223372036854775807_int64, fnname: "xor_9223372036854775807_int64", in: -9223372036854775807, want: -2}, test_int64{fn: xor_int64_9223372036854775807, fnname: "xor_int64_9223372036854775807", in: -9223372036854775807, want: -2}, test_int64{fn: xor_9223372036854775807_int64, fnname: "xor_9223372036854775807_int64", in: -4294967296, want: -9223372032559808513}, test_int64{fn: xor_int64_9223372036854775807, fnname: "xor_int64_9223372036854775807", in: -4294967296, want: -9223372032559808513}, test_int64{fn: xor_9223372036854775807_int64, fnname: "xor_9223372036854775807_int64", in: -1, want: -9223372036854775808}, test_int64{fn: xor_int64_9223372036854775807, fnname: "xor_int64_9223372036854775807", in: -1, want: -9223372036854775808}, test_int64{fn: xor_9223372036854775807_int64, fnname: "xor_9223372036854775807_int64", in: 0, want: 9223372036854775807}, test_int64{fn: xor_int64_9223372036854775807, fnname: "xor_int64_9223372036854775807", in: 0, want: 9223372036854775807}, test_int64{fn: xor_9223372036854775807_int64, fnname: "xor_9223372036854775807_int64", in: 1, want: 9223372036854775806}, test_int64{fn: xor_int64_9223372036854775807, fnname: "xor_int64_9223372036854775807", in: 1, want: 9223372036854775806}, test_int64{fn: xor_9223372036854775807_int64, fnname: "xor_9223372036854775807_int64", in: 4294967296, want: 9223372032559808511}, test_int64{fn: xor_int64_9223372036854775807, fnname: "xor_int64_9223372036854775807", in: 4294967296, want: 9223372032559808511}, test_int64{fn: xor_9223372036854775807_int64, fnname: "xor_9223372036854775807_int64", in: 9223372036854775806, want: 1}, test_int64{fn: xor_int64_9223372036854775807, fnname: "xor_int64_9223372036854775807", in: 9223372036854775806, want: 1}, test_int64{fn: xor_9223372036854775807_int64, fnname: "xor_9223372036854775807_int64", in: 9223372036854775807, want: 0}, test_int64{fn: xor_int64_9223372036854775807, fnname: "xor_int64_9223372036854775807", in: 9223372036854775807, want: 0}} type test_int64mul struct { fn func(int64) int64 fnname string in int64 want int64 } var tests_int64mul = []test_int64{ test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: -9, want: 81}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: -9, want: 81}, test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: -5, want: 45}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: -5, want: 45}, test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: -3, want: 27}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: -3, want: 27}, test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 3, want: -27}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 3, want: -27}, test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 5, want: -45}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 5, want: -45}, test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 7, want: -63}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 7, want: -63}, test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 9, want: -81}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 9, want: -81}, test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 10, want: -90}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 10, want: -90}, test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 11, want: -99}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 11, want: -99}, test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 13, want: -117}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 13, want: -117}, test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 19, want: -171}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 19, want: -171}, test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 21, want: -189}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 21, want: -189}, test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 25, want: -225}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 25, want: -225}, test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 27, want: -243}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 27, want: -243}, test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 37, want: -333}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 37, want: -333}, test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 41, want: -369}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 41, want: -369}, test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 45, want: -405}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 45, want: -405}, test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 73, want: -657}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 73, want: -657}, test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 81, want: -729}, test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 81, want: -729}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: -9, want: 45}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: -9, want: 45}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: -5, want: 25}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: -5, want: 25}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: -3, want: 15}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: -3, want: 15}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 3, want: -15}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 3, want: -15}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 5, want: -25}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 5, want: -25}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 7, want: -35}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 7, want: -35}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 9, want: -45}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 9, want: -45}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 10, want: -50}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 10, want: -50}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 11, want: -55}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 11, want: -55}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 13, want: -65}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 13, want: -65}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 19, want: -95}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 19, want: -95}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 21, want: -105}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 21, want: -105}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 25, want: -125}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 25, want: -125}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 27, want: -135}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 27, want: -135}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 37, want: -185}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 37, want: -185}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 41, want: -205}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 41, want: -205}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 45, want: -225}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 45, want: -225}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 73, want: -365}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 73, want: -365}, test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 81, want: -405}, test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 81, want: -405}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: -9, want: 27}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: -9, want: 27}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: -5, want: 15}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: -5, want: 15}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: -3, want: 9}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: -3, want: 9}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 3, want: -9}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 3, want: -9}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 5, want: -15}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 5, want: -15}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 7, want: -21}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 7, want: -21}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 9, want: -27}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 9, want: -27}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 10, want: -30}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 10, want: -30}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 11, want: -33}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 11, want: -33}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 13, want: -39}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 13, want: -39}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 19, want: -57}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 19, want: -57}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 21, want: -63}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 21, want: -63}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 25, want: -75}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 25, want: -75}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 27, want: -81}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 27, want: -81}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 37, want: -111}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 37, want: -111}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 41, want: -123}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 41, want: -123}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 45, want: -135}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 45, want: -135}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 73, want: -219}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 73, want: -219}, test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 81, want: -243}, test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 81, want: -243}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: -9, want: -27}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: -9, want: -27}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: -5, want: -15}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: -5, want: -15}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: -3, want: -9}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: -3, want: -9}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 3, want: 9}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 3, want: 9}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 5, want: 15}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 5, want: 15}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 7, want: 21}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 7, want: 21}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 9, want: 27}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 9, want: 27}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 10, want: 30}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 10, want: 30}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 11, want: 33}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 11, want: 33}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 13, want: 39}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 13, want: 39}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 19, want: 57}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 19, want: 57}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 21, want: 63}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 21, want: 63}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 25, want: 75}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 25, want: 75}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 27, want: 81}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 27, want: 81}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 37, want: 111}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 37, want: 111}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 41, want: 123}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 41, want: 123}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 45, want: 135}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 45, want: 135}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 73, want: 219}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 73, want: 219}, test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 81, want: 243}, test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 81, want: 243}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: -9, want: -45}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: -9, want: -45}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: -5, want: -25}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: -5, want: -25}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: -3, want: -15}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: -3, want: -15}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 3, want: 15}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 3, want: 15}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 5, want: 25}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 5, want: 25}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 7, want: 35}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 7, want: 35}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 9, want: 45}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 9, want: 45}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 10, want: 50}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 10, want: 50}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 11, want: 55}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 11, want: 55}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 13, want: 65}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 13, want: 65}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 19, want: 95}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 19, want: 95}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 21, want: 105}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 21, want: 105}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 25, want: 125}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 25, want: 125}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 27, want: 135}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 27, want: 135}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 37, want: 185}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 37, want: 185}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 41, want: 205}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 41, want: 205}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 45, want: 225}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 45, want: 225}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 73, want: 365}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 73, want: 365}, test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 81, want: 405}, test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 81, want: 405}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: -9, want: -63}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: -9, want: -63}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: -5, want: -35}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: -5, want: -35}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: -3, want: -21}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: -3, want: -21}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 3, want: 21}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 3, want: 21}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 5, want: 35}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 5, want: 35}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 7, want: 49}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 7, want: 49}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 9, want: 63}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 9, want: 63}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 10, want: 70}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 10, want: 70}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 11, want: 77}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 11, want: 77}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 13, want: 91}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 13, want: 91}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 19, want: 133}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 19, want: 133}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 21, want: 147}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 21, want: 147}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 25, want: 175}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 25, want: 175}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 27, want: 189}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 27, want: 189}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 37, want: 259}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 37, want: 259}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 41, want: 287}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 41, want: 287}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 45, want: 315}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 45, want: 315}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 73, want: 511}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 73, want: 511}, test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 81, want: 567}, test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 81, want: 567}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: -9, want: -81}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: -9, want: -81}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: -5, want: -45}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: -5, want: -45}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: -3, want: -27}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: -3, want: -27}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 3, want: 27}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 3, want: 27}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 5, want: 45}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 5, want: 45}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 7, want: 63}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 7, want: 63}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 9, want: 81}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 9, want: 81}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 10, want: 90}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 10, want: 90}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 11, want: 99}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 11, want: 99}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 13, want: 117}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 13, want: 117}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 19, want: 171}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 19, want: 171}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 21, want: 189}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 21, want: 189}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 25, want: 225}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 25, want: 225}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 27, want: 243}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 27, want: 243}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 37, want: 333}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 37, want: 333}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 41, want: 369}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 41, want: 369}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 45, want: 405}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 45, want: 405}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 73, want: 657}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 73, want: 657}, test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 81, want: 729}, test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 81, want: 729}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: -9, want: -90}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: -9, want: -90}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: -5, want: -50}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: -5, want: -50}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: -3, want: -30}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: -3, want: -30}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 3, want: 30}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 3, want: 30}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 5, want: 50}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 5, want: 50}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 7, want: 70}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 7, want: 70}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 9, want: 90}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 9, want: 90}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 10, want: 100}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 10, want: 100}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 11, want: 110}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 11, want: 110}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 13, want: 130}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 13, want: 130}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 19, want: 190}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 19, want: 190}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 21, want: 210}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 21, want: 210}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 25, want: 250}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 25, want: 250}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 27, want: 270}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 27, want: 270}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 37, want: 370}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 37, want: 370}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 41, want: 410}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 41, want: 410}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 45, want: 450}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 45, want: 450}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 73, want: 730}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 73, want: 730}, test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 81, want: 810}, test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 81, want: 810}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: -9, want: -99}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: -9, want: -99}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: -5, want: -55}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: -5, want: -55}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: -3, want: -33}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: -3, want: -33}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 3, want: 33}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 3, want: 33}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 5, want: 55}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 5, want: 55}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 7, want: 77}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 7, want: 77}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 9, want: 99}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 9, want: 99}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 10, want: 110}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 10, want: 110}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 11, want: 121}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 11, want: 121}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 13, want: 143}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 13, want: 143}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 19, want: 209}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 19, want: 209}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 21, want: 231}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 21, want: 231}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 25, want: 275}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 25, want: 275}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 27, want: 297}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 27, want: 297}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 37, want: 407}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 37, want: 407}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 41, want: 451}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 41, want: 451}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 45, want: 495}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 45, want: 495}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 73, want: 803}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 73, want: 803}, test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 81, want: 891}, test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 81, want: 891}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: -9, want: -117}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: -9, want: -117}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: -5, want: -65}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: -5, want: -65}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: -3, want: -39}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: -3, want: -39}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 3, want: 39}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 3, want: 39}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 5, want: 65}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 5, want: 65}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 7, want: 91}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 7, want: 91}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 9, want: 117}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 9, want: 117}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 10, want: 130}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 10, want: 130}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 11, want: 143}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 11, want: 143}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 13, want: 169}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 13, want: 169}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 19, want: 247}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 19, want: 247}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 21, want: 273}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 21, want: 273}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 25, want: 325}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 25, want: 325}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 27, want: 351}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 27, want: 351}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 37, want: 481}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 37, want: 481}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 41, want: 533}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 41, want: 533}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 45, want: 585}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 45, want: 585}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 73, want: 949}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 73, want: 949}, test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 81, want: 1053}, test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 81, want: 1053}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: -9, want: -171}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: -9, want: -171}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: -5, want: -95}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: -5, want: -95}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: -3, want: -57}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: -3, want: -57}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 3, want: 57}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 3, want: 57}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 5, want: 95}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 5, want: 95}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 7, want: 133}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 7, want: 133}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 9, want: 171}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 9, want: 171}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 10, want: 190}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 10, want: 190}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 11, want: 209}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 11, want: 209}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 13, want: 247}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 13, want: 247}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 19, want: 361}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 19, want: 361}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 21, want: 399}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 21, want: 399}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 25, want: 475}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 25, want: 475}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 27, want: 513}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 27, want: 513}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 37, want: 703}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 37, want: 703}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 41, want: 779}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 41, want: 779}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 45, want: 855}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 45, want: 855}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 73, want: 1387}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 73, want: 1387}, test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 81, want: 1539}, test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 81, want: 1539}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: -9, want: -189}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: -9, want: -189}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: -5, want: -105}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: -5, want: -105}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: -3, want: -63}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: -3, want: -63}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 3, want: 63}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 3, want: 63}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 5, want: 105}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 5, want: 105}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 7, want: 147}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 7, want: 147}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 9, want: 189}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 9, want: 189}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 10, want: 210}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 10, want: 210}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 11, want: 231}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 11, want: 231}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 13, want: 273}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 13, want: 273}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 19, want: 399}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 19, want: 399}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 21, want: 441}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 21, want: 441}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 25, want: 525}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 25, want: 525}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 27, want: 567}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 27, want: 567}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 37, want: 777}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 37, want: 777}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 41, want: 861}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 41, want: 861}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 45, want: 945}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 45, want: 945}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 73, want: 1533}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 73, want: 1533}, test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 81, want: 1701}, test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 81, want: 1701}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: -9, want: -225}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: -9, want: -225}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: -5, want: -125}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: -5, want: -125}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: -3, want: -75}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: -3, want: -75}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 3, want: 75}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 3, want: 75}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 5, want: 125}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 5, want: 125}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 7, want: 175}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 7, want: 175}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 9, want: 225}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 9, want: 225}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 10, want: 250}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 10, want: 250}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 11, want: 275}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 11, want: 275}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 13, want: 325}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 13, want: 325}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 19, want: 475}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 19, want: 475}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 21, want: 525}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 21, want: 525}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 25, want: 625}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 25, want: 625}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 27, want: 675}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 27, want: 675}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 37, want: 925}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 37, want: 925}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 41, want: 1025}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 41, want: 1025}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 45, want: 1125}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 45, want: 1125}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 73, want: 1825}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 73, want: 1825}, test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 81, want: 2025}, test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 81, want: 2025}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: -9, want: -243}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: -9, want: -243}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: -5, want: -135}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: -5, want: -135}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: -3, want: -81}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: -3, want: -81}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 3, want: 81}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 3, want: 81}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 5, want: 135}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 5, want: 135}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 7, want: 189}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 7, want: 189}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 9, want: 243}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 9, want: 243}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 10, want: 270}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 10, want: 270}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 11, want: 297}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 11, want: 297}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 13, want: 351}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 13, want: 351}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 19, want: 513}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 19, want: 513}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 21, want: 567}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 21, want: 567}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 25, want: 675}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 25, want: 675}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 27, want: 729}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 27, want: 729}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 37, want: 999}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 37, want: 999}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 41, want: 1107}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 41, want: 1107}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 45, want: 1215}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 45, want: 1215}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 73, want: 1971}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 73, want: 1971}, test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 81, want: 2187}, test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 81, want: 2187}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: -9, want: -333}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: -9, want: -333}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: -5, want: -185}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: -5, want: -185}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: -3, want: -111}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: -3, want: -111}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 3, want: 111}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 3, want: 111}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 5, want: 185}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 5, want: 185}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 7, want: 259}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 7, want: 259}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 9, want: 333}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 9, want: 333}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 10, want: 370}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 10, want: 370}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 11, want: 407}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 11, want: 407}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 13, want: 481}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 13, want: 481}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 19, want: 703}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 19, want: 703}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 21, want: 777}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 21, want: 777}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 25, want: 925}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 25, want: 925}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 27, want: 999}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 27, want: 999}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 37, want: 1369}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 37, want: 1369}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 41, want: 1517}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 41, want: 1517}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 45, want: 1665}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 45, want: 1665}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 73, want: 2701}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 73, want: 2701}, test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 81, want: 2997}, test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 81, want: 2997}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: -9, want: -369}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: -9, want: -369}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: -5, want: -205}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: -5, want: -205}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: -3, want: -123}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: -3, want: -123}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 3, want: 123}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 3, want: 123}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 5, want: 205}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 5, want: 205}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 7, want: 287}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 7, want: 287}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 9, want: 369}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 9, want: 369}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 10, want: 410}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 10, want: 410}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 11, want: 451}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 11, want: 451}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 13, want: 533}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 13, want: 533}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 19, want: 779}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 19, want: 779}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 21, want: 861}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 21, want: 861}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 25, want: 1025}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 25, want: 1025}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 27, want: 1107}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 27, want: 1107}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 37, want: 1517}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 37, want: 1517}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 41, want: 1681}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 41, want: 1681}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 45, want: 1845}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 45, want: 1845}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 73, want: 2993}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 73, want: 2993}, test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 81, want: 3321}, test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 81, want: 3321}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: -9, want: -405}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: -9, want: -405}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: -5, want: -225}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: -5, want: -225}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: -3, want: -135}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: -3, want: -135}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 3, want: 135}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 3, want: 135}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 5, want: 225}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 5, want: 225}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 7, want: 315}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 7, want: 315}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 9, want: 405}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 9, want: 405}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 10, want: 450}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 10, want: 450}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 11, want: 495}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 11, want: 495}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 13, want: 585}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 13, want: 585}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 19, want: 855}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 19, want: 855}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 21, want: 945}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 21, want: 945}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 25, want: 1125}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 25, want: 1125}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 27, want: 1215}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 27, want: 1215}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 37, want: 1665}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 37, want: 1665}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 41, want: 1845}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 41, want: 1845}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 45, want: 2025}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 45, want: 2025}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 73, want: 3285}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 73, want: 3285}, test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 81, want: 3645}, test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 81, want: 3645}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: -9, want: -657}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: -9, want: -657}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: -5, want: -365}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: -5, want: -365}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: -3, want: -219}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: -3, want: -219}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 3, want: 219}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 3, want: 219}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 5, want: 365}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 5, want: 365}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 7, want: 511}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 7, want: 511}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 9, want: 657}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 9, want: 657}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 10, want: 730}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 10, want: 730}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 11, want: 803}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 11, want: 803}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 13, want: 949}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 13, want: 949}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 19, want: 1387}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 19, want: 1387}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 21, want: 1533}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 21, want: 1533}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 25, want: 1825}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 25, want: 1825}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 27, want: 1971}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 27, want: 1971}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 37, want: 2701}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 37, want: 2701}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 41, want: 2993}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 41, want: 2993}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 45, want: 3285}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 45, want: 3285}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 73, want: 5329}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 73, want: 5329}, test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 81, want: 5913}, test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 81, want: 5913}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: -9, want: -729}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: -9, want: -729}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: -5, want: -405}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: -5, want: -405}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: -3, want: -243}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: -3, want: -243}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 3, want: 243}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 3, want: 243}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 5, want: 405}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 5, want: 405}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 7, want: 567}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 7, want: 567}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 9, want: 729}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 9, want: 729}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 10, want: 810}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 10, want: 810}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 11, want: 891}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 11, want: 891}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 13, want: 1053}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 13, want: 1053}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 19, want: 1539}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 19, want: 1539}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 21, want: 1701}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 21, want: 1701}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 25, want: 2025}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 25, want: 2025}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 27, want: 2187}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 27, want: 2187}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 37, want: 2997}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 37, want: 2997}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 41, want: 3321}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 41, want: 3321}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 45, want: 3645}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 45, want: 3645}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 73, want: 5913}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 73, want: 5913}, test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 81, want: 6561}, test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 81, want: 6561}} type test_uint32 struct { fn func(uint32) uint32 fnname string in uint32 want uint32 } var tests_uint32 = []test_uint32{ test_uint32{fn: add_0_uint32, fnname: "add_0_uint32", in: 0, want: 0}, test_uint32{fn: add_uint32_0, fnname: "add_uint32_0", in: 0, want: 0}, test_uint32{fn: add_0_uint32, fnname: "add_0_uint32", in: 1, want: 1}, test_uint32{fn: add_uint32_0, fnname: "add_uint32_0", in: 1, want: 1}, test_uint32{fn: add_0_uint32, fnname: "add_0_uint32", in: 4294967295, want: 4294967295}, test_uint32{fn: add_uint32_0, fnname: "add_uint32_0", in: 4294967295, want: 4294967295}, test_uint32{fn: add_1_uint32, fnname: "add_1_uint32", in: 0, want: 1}, test_uint32{fn: add_uint32_1, fnname: "add_uint32_1", in: 0, want: 1}, test_uint32{fn: add_1_uint32, fnname: "add_1_uint32", in: 1, want: 2}, test_uint32{fn: add_uint32_1, fnname: "add_uint32_1", in: 1, want: 2}, test_uint32{fn: add_1_uint32, fnname: "add_1_uint32", in: 4294967295, want: 0}, test_uint32{fn: add_uint32_1, fnname: "add_uint32_1", in: 4294967295, want: 0}, test_uint32{fn: add_4294967295_uint32, fnname: "add_4294967295_uint32", in: 0, want: 4294967295}, test_uint32{fn: add_uint32_4294967295, fnname: "add_uint32_4294967295", in: 0, want: 4294967295}, test_uint32{fn: add_4294967295_uint32, fnname: "add_4294967295_uint32", in: 1, want: 0}, test_uint32{fn: add_uint32_4294967295, fnname: "add_uint32_4294967295", in: 1, want: 0}, test_uint32{fn: add_4294967295_uint32, fnname: "add_4294967295_uint32", in: 4294967295, want: 4294967294}, test_uint32{fn: add_uint32_4294967295, fnname: "add_uint32_4294967295", in: 4294967295, want: 4294967294}, test_uint32{fn: sub_0_uint32, fnname: "sub_0_uint32", in: 0, want: 0}, test_uint32{fn: sub_uint32_0, fnname: "sub_uint32_0", in: 0, want: 0}, test_uint32{fn: sub_0_uint32, fnname: "sub_0_uint32", in: 1, want: 4294967295}, test_uint32{fn: sub_uint32_0, fnname: "sub_uint32_0", in: 1, want: 1}, test_uint32{fn: sub_0_uint32, fnname: "sub_0_uint32", in: 4294967295, want: 1}, test_uint32{fn: sub_uint32_0, fnname: "sub_uint32_0", in: 4294967295, want: 4294967295}, test_uint32{fn: sub_1_uint32, fnname: "sub_1_uint32", in: 0, want: 1}, test_uint32{fn: sub_uint32_1, fnname: "sub_uint32_1", in: 0, want: 4294967295}, test_uint32{fn: sub_1_uint32, fnname: "sub_1_uint32", in: 1, want: 0}, test_uint32{fn: sub_uint32_1, fnname: "sub_uint32_1", in: 1, want: 0}, test_uint32{fn: sub_1_uint32, fnname: "sub_1_uint32", in: 4294967295, want: 2}, test_uint32{fn: sub_uint32_1, fnname: "sub_uint32_1", in: 4294967295, want: 4294967294}, test_uint32{fn: sub_4294967295_uint32, fnname: "sub_4294967295_uint32", in: 0, want: 4294967295}, test_uint32{fn: sub_uint32_4294967295, fnname: "sub_uint32_4294967295", in: 0, want: 1}, test_uint32{fn: sub_4294967295_uint32, fnname: "sub_4294967295_uint32", in: 1, want: 4294967294}, test_uint32{fn: sub_uint32_4294967295, fnname: "sub_uint32_4294967295", in: 1, want: 2}, test_uint32{fn: sub_4294967295_uint32, fnname: "sub_4294967295_uint32", in: 4294967295, want: 0}, test_uint32{fn: sub_uint32_4294967295, fnname: "sub_uint32_4294967295", in: 4294967295, want: 0}, test_uint32{fn: div_0_uint32, fnname: "div_0_uint32", in: 1, want: 0}, test_uint32{fn: div_0_uint32, fnname: "div_0_uint32", in: 4294967295, want: 0}, test_uint32{fn: div_uint32_1, fnname: "div_uint32_1", in: 0, want: 0}, test_uint32{fn: div_1_uint32, fnname: "div_1_uint32", in: 1, want: 1}, test_uint32{fn: div_uint32_1, fnname: "div_uint32_1", in: 1, want: 1}, test_uint32{fn: div_1_uint32, fnname: "div_1_uint32", in: 4294967295, want: 0}, test_uint32{fn: div_uint32_1, fnname: "div_uint32_1", in: 4294967295, want: 4294967295}, test_uint32{fn: div_uint32_4294967295, fnname: "div_uint32_4294967295", in: 0, want: 0}, test_uint32{fn: div_4294967295_uint32, fnname: "div_4294967295_uint32", in: 1, want: 4294967295}, test_uint32{fn: div_uint32_4294967295, fnname: "div_uint32_4294967295", in: 1, want: 0}, test_uint32{fn: div_4294967295_uint32, fnname: "div_4294967295_uint32", in: 4294967295, want: 1}, test_uint32{fn: div_uint32_4294967295, fnname: "div_uint32_4294967295", in: 4294967295, want: 1}, test_uint32{fn: mul_0_uint32, fnname: "mul_0_uint32", in: 0, want: 0}, test_uint32{fn: mul_uint32_0, fnname: "mul_uint32_0", in: 0, want: 0}, test_uint32{fn: mul_0_uint32, fnname: "mul_0_uint32", in: 1, want: 0}, test_uint32{fn: mul_uint32_0, fnname: "mul_uint32_0", in: 1, want: 0}, test_uint32{fn: mul_0_uint32, fnname: "mul_0_uint32", in: 4294967295, want: 0}, test_uint32{fn: mul_uint32_0, fnname: "mul_uint32_0", in: 4294967295, want: 0}, test_uint32{fn: mul_1_uint32, fnname: "mul_1_uint32", in: 0, want: 0}, test_uint32{fn: mul_uint32_1, fnname: "mul_uint32_1", in: 0, want: 0}, test_uint32{fn: mul_1_uint32, fnname: "mul_1_uint32", in: 1, want: 1}, test_uint32{fn: mul_uint32_1, fnname: "mul_uint32_1", in: 1, want: 1}, test_uint32{fn: mul_1_uint32, fnname: "mul_1_uint32", in: 4294967295, want: 4294967295}, test_uint32{fn: mul_uint32_1, fnname: "mul_uint32_1", in: 4294967295, want: 4294967295}, test_uint32{fn: mul_4294967295_uint32, fnname: "mul_4294967295_uint32", in: 0, want: 0}, test_uint32{fn: mul_uint32_4294967295, fnname: "mul_uint32_4294967295", in: 0, want: 0}, test_uint32{fn: mul_4294967295_uint32, fnname: "mul_4294967295_uint32", in: 1, want: 4294967295}, test_uint32{fn: mul_uint32_4294967295, fnname: "mul_uint32_4294967295", in: 1, want: 4294967295}, test_uint32{fn: mul_4294967295_uint32, fnname: "mul_4294967295_uint32", in: 4294967295, want: 1}, test_uint32{fn: mul_uint32_4294967295, fnname: "mul_uint32_4294967295", in: 4294967295, want: 1}, test_uint32{fn: lsh_0_uint32, fnname: "lsh_0_uint32", in: 0, want: 0}, test_uint32{fn: lsh_uint32_0, fnname: "lsh_uint32_0", in: 0, want: 0}, test_uint32{fn: lsh_0_uint32, fnname: "lsh_0_uint32", in: 1, want: 0}, test_uint32{fn: lsh_uint32_0, fnname: "lsh_uint32_0", in: 1, want: 1}, test_uint32{fn: lsh_0_uint32, fnname: "lsh_0_uint32", in: 4294967295, want: 0}, test_uint32{fn: lsh_uint32_0, fnname: "lsh_uint32_0", in: 4294967295, want: 4294967295}, test_uint32{fn: lsh_1_uint32, fnname: "lsh_1_uint32", in: 0, want: 1}, test_uint32{fn: lsh_uint32_1, fnname: "lsh_uint32_1", in: 0, want: 0}, test_uint32{fn: lsh_1_uint32, fnname: "lsh_1_uint32", in: 1, want: 2}, test_uint32{fn: lsh_uint32_1, fnname: "lsh_uint32_1", in: 1, want: 2}, test_uint32{fn: lsh_1_uint32, fnname: "lsh_1_uint32", in: 4294967295, want: 0}, test_uint32{fn: lsh_uint32_1, fnname: "lsh_uint32_1", in: 4294967295, want: 4294967294}, test_uint32{fn: lsh_4294967295_uint32, fnname: "lsh_4294967295_uint32", in: 0, want: 4294967295}, test_uint32{fn: lsh_uint32_4294967295, fnname: "lsh_uint32_4294967295", in: 0, want: 0}, test_uint32{fn: lsh_4294967295_uint32, fnname: "lsh_4294967295_uint32", in: 1, want: 4294967294}, test_uint32{fn: lsh_uint32_4294967295, fnname: "lsh_uint32_4294967295", in: 1, want: 0}, test_uint32{fn: lsh_4294967295_uint32, fnname: "lsh_4294967295_uint32", in: 4294967295, want: 0}, test_uint32{fn: lsh_uint32_4294967295, fnname: "lsh_uint32_4294967295", in: 4294967295, want: 0}, test_uint32{fn: rsh_0_uint32, fnname: "rsh_0_uint32", in: 0, want: 0}, test_uint32{fn: rsh_uint32_0, fnname: "rsh_uint32_0", in: 0, want: 0}, test_uint32{fn: rsh_0_uint32, fnname: "rsh_0_uint32", in: 1, want: 0}, test_uint32{fn: rsh_uint32_0, fnname: "rsh_uint32_0", in: 1, want: 1}, test_uint32{fn: rsh_0_uint32, fnname: "rsh_0_uint32", in: 4294967295, want: 0}, test_uint32{fn: rsh_uint32_0, fnname: "rsh_uint32_0", in: 4294967295, want: 4294967295}, test_uint32{fn: rsh_1_uint32, fnname: "rsh_1_uint32", in: 0, want: 1}, test_uint32{fn: rsh_uint32_1, fnname: "rsh_uint32_1", in: 0, want: 0}, test_uint32{fn: rsh_1_uint32, fnname: "rsh_1_uint32", in: 1, want: 0}, test_uint32{fn: rsh_uint32_1, fnname: "rsh_uint32_1", in: 1, want: 0}, test_uint32{fn: rsh_1_uint32, fnname: "rsh_1_uint32", in: 4294967295, want: 0}, test_uint32{fn: rsh_uint32_1, fnname: "rsh_uint32_1", in: 4294967295, want: 2147483647}, test_uint32{fn: rsh_4294967295_uint32, fnname: "rsh_4294967295_uint32", in: 0, want: 4294967295}, test_uint32{fn: rsh_uint32_4294967295, fnname: "rsh_uint32_4294967295", in: 0, want: 0}, test_uint32{fn: rsh_4294967295_uint32, fnname: "rsh_4294967295_uint32", in: 1, want: 2147483647}, test_uint32{fn: rsh_uint32_4294967295, fnname: "rsh_uint32_4294967295", in: 1, want: 0}, test_uint32{fn: rsh_4294967295_uint32, fnname: "rsh_4294967295_uint32", in: 4294967295, want: 0}, test_uint32{fn: rsh_uint32_4294967295, fnname: "rsh_uint32_4294967295", in: 4294967295, want: 0}, test_uint32{fn: mod_0_uint32, fnname: "mod_0_uint32", in: 1, want: 0}, test_uint32{fn: mod_0_uint32, fnname: "mod_0_uint32", in: 4294967295, want: 0}, test_uint32{fn: mod_uint32_1, fnname: "mod_uint32_1", in: 0, want: 0}, test_uint32{fn: mod_1_uint32, fnname: "mod_1_uint32", in: 1, want: 0}, test_uint32{fn: mod_uint32_1, fnname: "mod_uint32_1", in: 1, want: 0}, test_uint32{fn: mod_1_uint32, fnname: "mod_1_uint32", in: 4294967295, want: 1}, test_uint32{fn: mod_uint32_1, fnname: "mod_uint32_1", in: 4294967295, want: 0}, test_uint32{fn: mod_uint32_4294967295, fnname: "mod_uint32_4294967295", in: 0, want: 0}, test_uint32{fn: mod_4294967295_uint32, fnname: "mod_4294967295_uint32", in: 1, want: 0}, test_uint32{fn: mod_uint32_4294967295, fnname: "mod_uint32_4294967295", in: 1, want: 1}, test_uint32{fn: mod_4294967295_uint32, fnname: "mod_4294967295_uint32", in: 4294967295, want: 0}, test_uint32{fn: mod_uint32_4294967295, fnname: "mod_uint32_4294967295", in: 4294967295, want: 0}, test_uint32{fn: and_0_uint32, fnname: "and_0_uint32", in: 0, want: 0}, test_uint32{fn: and_uint32_0, fnname: "and_uint32_0", in: 0, want: 0}, test_uint32{fn: and_0_uint32, fnname: "and_0_uint32", in: 1, want: 0}, test_uint32{fn: and_uint32_0, fnname: "and_uint32_0", in: 1, want: 0}, test_uint32{fn: and_0_uint32, fnname: "and_0_uint32", in: 4294967295, want: 0}, test_uint32{fn: and_uint32_0, fnname: "and_uint32_0", in: 4294967295, want: 0}, test_uint32{fn: and_1_uint32, fnname: "and_1_uint32", in: 0, want: 0}, test_uint32{fn: and_uint32_1, fnname: "and_uint32_1", in: 0, want: 0}, test_uint32{fn: and_1_uint32, fnname: "and_1_uint32", in: 1, want: 1}, test_uint32{fn: and_uint32_1, fnname: "and_uint32_1", in: 1, want: 1}, test_uint32{fn: and_1_uint32, fnname: "and_1_uint32", in: 4294967295, want: 1}, test_uint32{fn: and_uint32_1, fnname: "and_uint32_1", in: 4294967295, want: 1}, test_uint32{fn: and_4294967295_uint32, fnname: "and_4294967295_uint32", in: 0, want: 0}, test_uint32{fn: and_uint32_4294967295, fnname: "and_uint32_4294967295", in: 0, want: 0}, test_uint32{fn: and_4294967295_uint32, fnname: "and_4294967295_uint32", in: 1, want: 1}, test_uint32{fn: and_uint32_4294967295, fnname: "and_uint32_4294967295", in: 1, want: 1}, test_uint32{fn: and_4294967295_uint32, fnname: "and_4294967295_uint32", in: 4294967295, want: 4294967295}, test_uint32{fn: and_uint32_4294967295, fnname: "and_uint32_4294967295", in: 4294967295, want: 4294967295}, test_uint32{fn: or_0_uint32, fnname: "or_0_uint32", in: 0, want: 0}, test_uint32{fn: or_uint32_0, fnname: "or_uint32_0", in: 0, want: 0}, test_uint32{fn: or_0_uint32, fnname: "or_0_uint32", in: 1, want: 1}, test_uint32{fn: or_uint32_0, fnname: "or_uint32_0", in: 1, want: 1}, test_uint32{fn: or_0_uint32, fnname: "or_0_uint32", in: 4294967295, want: 4294967295}, test_uint32{fn: or_uint32_0, fnname: "or_uint32_0", in: 4294967295, want: 4294967295}, test_uint32{fn: or_1_uint32, fnname: "or_1_uint32", in: 0, want: 1}, test_uint32{fn: or_uint32_1, fnname: "or_uint32_1", in: 0, want: 1}, test_uint32{fn: or_1_uint32, fnname: "or_1_uint32", in: 1, want: 1}, test_uint32{fn: or_uint32_1, fnname: "or_uint32_1", in: 1, want: 1}, test_uint32{fn: or_1_uint32, fnname: "or_1_uint32", in: 4294967295, want: 4294967295}, test_uint32{fn: or_uint32_1, fnname: "or_uint32_1", in: 4294967295, want: 4294967295}, test_uint32{fn: or_4294967295_uint32, fnname: "or_4294967295_uint32", in: 0, want: 4294967295}, test_uint32{fn: or_uint32_4294967295, fnname: "or_uint32_4294967295", in: 0, want: 4294967295}, test_uint32{fn: or_4294967295_uint32, fnname: "or_4294967295_uint32", in: 1, want: 4294967295}, test_uint32{fn: or_uint32_4294967295, fnname: "or_uint32_4294967295", in: 1, want: 4294967295}, test_uint32{fn: or_4294967295_uint32, fnname: "or_4294967295_uint32", in: 4294967295, want: 4294967295}, test_uint32{fn: or_uint32_4294967295, fnname: "or_uint32_4294967295", in: 4294967295, want: 4294967295}, test_uint32{fn: xor_0_uint32, fnname: "xor_0_uint32", in: 0, want: 0}, test_uint32{fn: xor_uint32_0, fnname: "xor_uint32_0", in: 0, want: 0}, test_uint32{fn: xor_0_uint32, fnname: "xor_0_uint32", in: 1, want: 1}, test_uint32{fn: xor_uint32_0, fnname: "xor_uint32_0", in: 1, want: 1}, test_uint32{fn: xor_0_uint32, fnname: "xor_0_uint32", in: 4294967295, want: 4294967295}, test_uint32{fn: xor_uint32_0, fnname: "xor_uint32_0", in: 4294967295, want: 4294967295}, test_uint32{fn: xor_1_uint32, fnname: "xor_1_uint32", in: 0, want: 1}, test_uint32{fn: xor_uint32_1, fnname: "xor_uint32_1", in: 0, want: 1}, test_uint32{fn: xor_1_uint32, fnname: "xor_1_uint32", in: 1, want: 0}, test_uint32{fn: xor_uint32_1, fnname: "xor_uint32_1", in: 1, want: 0}, test_uint32{fn: xor_1_uint32, fnname: "xor_1_uint32", in: 4294967295, want: 4294967294}, test_uint32{fn: xor_uint32_1, fnname: "xor_uint32_1", in: 4294967295, want: 4294967294}, test_uint32{fn: xor_4294967295_uint32, fnname: "xor_4294967295_uint32", in: 0, want: 4294967295}, test_uint32{fn: xor_uint32_4294967295, fnname: "xor_uint32_4294967295", in: 0, want: 4294967295}, test_uint32{fn: xor_4294967295_uint32, fnname: "xor_4294967295_uint32", in: 1, want: 4294967294}, test_uint32{fn: xor_uint32_4294967295, fnname: "xor_uint32_4294967295", in: 1, want: 4294967294}, test_uint32{fn: xor_4294967295_uint32, fnname: "xor_4294967295_uint32", in: 4294967295, want: 0}, test_uint32{fn: xor_uint32_4294967295, fnname: "xor_uint32_4294967295", in: 4294967295, want: 0}} type test_uint32mul struct { fn func(uint32) uint32 fnname string in uint32 want uint32 } var tests_uint32mul = []test_uint32{ test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 3, want: 9}, test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 3, want: 9}, test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 5, want: 15}, test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 5, want: 15}, test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 7, want: 21}, test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 7, want: 21}, test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 9, want: 27}, test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 9, want: 27}, test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 10, want: 30}, test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 10, want: 30}, test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 11, want: 33}, test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 11, want: 33}, test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 13, want: 39}, test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 13, want: 39}, test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 19, want: 57}, test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 19, want: 57}, test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 21, want: 63}, test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 21, want: 63}, test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 25, want: 75}, test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 25, want: 75}, test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 27, want: 81}, test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 27, want: 81}, test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 37, want: 111}, test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 37, want: 111}, test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 41, want: 123}, test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 41, want: 123}, test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 45, want: 135}, test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 45, want: 135}, test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 73, want: 219}, test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 73, want: 219}, test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 81, want: 243}, test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 81, want: 243}, test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 3, want: 15}, test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 3, want: 15}, test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 5, want: 25}, test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 5, want: 25}, test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 7, want: 35}, test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 7, want: 35}, test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 9, want: 45}, test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 9, want: 45}, test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 10, want: 50}, test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 10, want: 50}, test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 11, want: 55}, test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 11, want: 55}, test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 13, want: 65}, test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 13, want: 65}, test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 19, want: 95}, test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 19, want: 95}, test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 21, want: 105}, test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 21, want: 105}, test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 25, want: 125}, test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 25, want: 125}, test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 27, want: 135}, test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 27, want: 135}, test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 37, want: 185}, test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 37, want: 185}, test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 41, want: 205}, test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 41, want: 205}, test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 45, want: 225}, test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 45, want: 225}, test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 73, want: 365}, test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 73, want: 365}, test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 81, want: 405}, test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 81, want: 405}, test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 3, want: 21}, test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 3, want: 21}, test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 5, want: 35}, test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 5, want: 35}, test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 7, want: 49}, test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 7, want: 49}, test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 9, want: 63}, test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 9, want: 63}, test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 10, want: 70}, test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 10, want: 70}, test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 11, want: 77}, test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 11, want: 77}, test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 13, want: 91}, test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 13, want: 91}, test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 19, want: 133}, test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 19, want: 133}, test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 21, want: 147}, test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 21, want: 147}, test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 25, want: 175}, test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 25, want: 175}, test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 27, want: 189}, test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 27, want: 189}, test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 37, want: 259}, test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 37, want: 259}, test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 41, want: 287}, test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 41, want: 287}, test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 45, want: 315}, test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 45, want: 315}, test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 73, want: 511}, test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 73, want: 511}, test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 81, want: 567}, test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 81, want: 567}, test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 3, want: 27}, test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 3, want: 27}, test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 5, want: 45}, test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 5, want: 45}, test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 7, want: 63}, test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 7, want: 63}, test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 9, want: 81}, test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 9, want: 81}, test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 10, want: 90}, test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 10, want: 90}, test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 11, want: 99}, test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 11, want: 99}, test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 13, want: 117}, test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 13, want: 117}, test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 19, want: 171}, test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 19, want: 171}, test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 21, want: 189}, test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 21, want: 189}, test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 25, want: 225}, test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 25, want: 225}, test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 27, want: 243}, test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 27, want: 243}, test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 37, want: 333}, test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 37, want: 333}, test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 41, want: 369}, test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 41, want: 369}, test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 45, want: 405}, test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 45, want: 405}, test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 73, want: 657}, test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 73, want: 657}, test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 81, want: 729}, test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 81, want: 729}, test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 3, want: 30}, test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 3, want: 30}, test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 5, want: 50}, test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 5, want: 50}, test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 7, want: 70}, test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 7, want: 70}, test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 9, want: 90}, test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 9, want: 90}, test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 10, want: 100}, test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 10, want: 100}, test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 11, want: 110}, test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 11, want: 110}, test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 13, want: 130}, test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 13, want: 130}, test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 19, want: 190}, test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 19, want: 190}, test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 21, want: 210}, test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 21, want: 210}, test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 25, want: 250}, test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 25, want: 250}, test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 27, want: 270}, test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 27, want: 270}, test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 37, want: 370}, test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 37, want: 370}, test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 41, want: 410}, test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 41, want: 410}, test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 45, want: 450}, test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 45, want: 450}, test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 73, want: 730}, test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 73, want: 730}, test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 81, want: 810}, test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 81, want: 810}, test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 3, want: 33}, test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 3, want: 33}, test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 5, want: 55}, test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 5, want: 55}, test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 7, want: 77}, test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 7, want: 77}, test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 9, want: 99}, test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 9, want: 99}, test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 10, want: 110}, test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 10, want: 110}, test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 11, want: 121}, test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 11, want: 121}, test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 13, want: 143}, test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 13, want: 143}, test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 19, want: 209}, test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 19, want: 209}, test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 21, want: 231}, test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 21, want: 231}, test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 25, want: 275}, test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 25, want: 275}, test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 27, want: 297}, test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 27, want: 297}, test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 37, want: 407}, test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 37, want: 407}, test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 41, want: 451}, test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 41, want: 451}, test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 45, want: 495}, test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 45, want: 495}, test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 73, want: 803}, test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 73, want: 803}, test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 81, want: 891}, test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 81, want: 891}, test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 3, want: 39}, test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 3, want: 39}, test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 5, want: 65}, test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 5, want: 65}, test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 7, want: 91}, test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 7, want: 91}, test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 9, want: 117}, test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 9, want: 117}, test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 10, want: 130}, test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 10, want: 130}, test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 11, want: 143}, test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 11, want: 143}, test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 13, want: 169}, test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 13, want: 169}, test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 19, want: 247}, test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 19, want: 247}, test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 21, want: 273}, test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 21, want: 273}, test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 25, want: 325}, test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 25, want: 325}, test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 27, want: 351}, test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 27, want: 351}, test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 37, want: 481}, test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 37, want: 481}, test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 41, want: 533}, test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 41, want: 533}, test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 45, want: 585}, test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 45, want: 585}, test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 73, want: 949}, test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 73, want: 949}, test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 81, want: 1053}, test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 81, want: 1053}, test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 3, want: 57}, test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 3, want: 57}, test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 5, want: 95}, test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 5, want: 95}, test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 7, want: 133}, test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 7, want: 133}, test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 9, want: 171}, test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 9, want: 171}, test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 10, want: 190}, test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 10, want: 190}, test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 11, want: 209}, test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 11, want: 209}, test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 13, want: 247}, test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 13, want: 247}, test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 19, want: 361}, test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 19, want: 361}, test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 21, want: 399}, test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 21, want: 399}, test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 25, want: 475}, test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 25, want: 475}, test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 27, want: 513}, test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 27, want: 513}, test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 37, want: 703}, test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 37, want: 703}, test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 41, want: 779}, test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 41, want: 779}, test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 45, want: 855}, test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 45, want: 855}, test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 73, want: 1387}, test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 73, want: 1387}, test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 81, want: 1539}, test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 81, want: 1539}, test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 3, want: 63}, test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 3, want: 63}, test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 5, want: 105}, test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 5, want: 105}, test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 7, want: 147}, test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 7, want: 147}, test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 9, want: 189}, test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 9, want: 189}, test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 10, want: 210}, test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 10, want: 210}, test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 11, want: 231}, test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 11, want: 231}, test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 13, want: 273}, test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 13, want: 273}, test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 19, want: 399}, test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 19, want: 399}, test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 21, want: 441}, test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 21, want: 441}, test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 25, want: 525}, test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 25, want: 525}, test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 27, want: 567}, test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 27, want: 567}, test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 37, want: 777}, test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 37, want: 777}, test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 41, want: 861}, test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 41, want: 861}, test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 45, want: 945}, test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 45, want: 945}, test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 73, want: 1533}, test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 73, want: 1533}, test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 81, want: 1701}, test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 81, want: 1701}, test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 3, want: 75}, test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 3, want: 75}, test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 5, want: 125}, test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 5, want: 125}, test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 7, want: 175}, test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 7, want: 175}, test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 9, want: 225}, test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 9, want: 225}, test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 10, want: 250}, test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 10, want: 250}, test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 11, want: 275}, test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 11, want: 275}, test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 13, want: 325}, test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 13, want: 325}, test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 19, want: 475}, test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 19, want: 475}, test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 21, want: 525}, test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 21, want: 525}, test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 25, want: 625}, test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 25, want: 625}, test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 27, want: 675}, test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 27, want: 675}, test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 37, want: 925}, test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 37, want: 925}, test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 41, want: 1025}, test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 41, want: 1025}, test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 45, want: 1125}, test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 45, want: 1125}, test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 73, want: 1825}, test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 73, want: 1825}, test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 81, want: 2025}, test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 81, want: 2025}, test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 3, want: 81}, test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 3, want: 81}, test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 5, want: 135}, test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 5, want: 135}, test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 7, want: 189}, test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 7, want: 189}, test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 9, want: 243}, test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 9, want: 243}, test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 10, want: 270}, test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 10, want: 270}, test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 11, want: 297}, test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 11, want: 297}, test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 13, want: 351}, test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 13, want: 351}, test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 19, want: 513}, test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 19, want: 513}, test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 21, want: 567}, test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 21, want: 567}, test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 25, want: 675}, test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 25, want: 675}, test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 27, want: 729}, test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 27, want: 729}, test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 37, want: 999}, test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 37, want: 999}, test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 41, want: 1107}, test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 41, want: 1107}, test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 45, want: 1215}, test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 45, want: 1215}, test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 73, want: 1971}, test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 73, want: 1971}, test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 81, want: 2187}, test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 81, want: 2187}, test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 3, want: 111}, test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 3, want: 111}, test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 5, want: 185}, test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 5, want: 185}, test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 7, want: 259}, test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 7, want: 259}, test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 9, want: 333}, test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 9, want: 333}, test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 10, want: 370}, test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 10, want: 370}, test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 11, want: 407}, test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 11, want: 407}, test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 13, want: 481}, test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 13, want: 481}, test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 19, want: 703}, test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 19, want: 703}, test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 21, want: 777}, test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 21, want: 777}, test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 25, want: 925}, test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 25, want: 925}, test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 27, want: 999}, test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 27, want: 999}, test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 37, want: 1369}, test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 37, want: 1369}, test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 41, want: 1517}, test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 41, want: 1517}, test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 45, want: 1665}, test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 45, want: 1665}, test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 73, want: 2701}, test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 73, want: 2701}, test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 81, want: 2997}, test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 81, want: 2997}, test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 3, want: 123}, test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 3, want: 123}, test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 5, want: 205}, test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 5, want: 205}, test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 7, want: 287}, test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 7, want: 287}, test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 9, want: 369}, test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 9, want: 369}, test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 10, want: 410}, test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 10, want: 410}, test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 11, want: 451}, test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 11, want: 451}, test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 13, want: 533}, test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 13, want: 533}, test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 19, want: 779}, test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 19, want: 779}, test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 21, want: 861}, test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 21, want: 861}, test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 25, want: 1025}, test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 25, want: 1025}, test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 27, want: 1107}, test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 27, want: 1107}, test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 37, want: 1517}, test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 37, want: 1517}, test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 41, want: 1681}, test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 41, want: 1681}, test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 45, want: 1845}, test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 45, want: 1845}, test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 73, want: 2993}, test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 73, want: 2993}, test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 81, want: 3321}, test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 81, want: 3321}, test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 3, want: 135}, test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 3, want: 135}, test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 5, want: 225}, test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 5, want: 225}, test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 7, want: 315}, test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 7, want: 315}, test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 9, want: 405}, test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 9, want: 405}, test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 10, want: 450}, test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 10, want: 450}, test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 11, want: 495}, test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 11, want: 495}, test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 13, want: 585}, test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 13, want: 585}, test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 19, want: 855}, test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 19, want: 855}, test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 21, want: 945}, test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 21, want: 945}, test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 25, want: 1125}, test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 25, want: 1125}, test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 27, want: 1215}, test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 27, want: 1215}, test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 37, want: 1665}, test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 37, want: 1665}, test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 41, want: 1845}, test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 41, want: 1845}, test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 45, want: 2025}, test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 45, want: 2025}, test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 73, want: 3285}, test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 73, want: 3285}, test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 81, want: 3645}, test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 81, want: 3645}, test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 3, want: 219}, test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 3, want: 219}, test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 5, want: 365}, test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 5, want: 365}, test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 7, want: 511}, test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 7, want: 511}, test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 9, want: 657}, test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 9, want: 657}, test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 10, want: 730}, test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 10, want: 730}, test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 11, want: 803}, test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 11, want: 803}, test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 13, want: 949}, test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 13, want: 949}, test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 19, want: 1387}, test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 19, want: 1387}, test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 21, want: 1533}, test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 21, want: 1533}, test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 25, want: 1825}, test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 25, want: 1825}, test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 27, want: 1971}, test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 27, want: 1971}, test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 37, want: 2701}, test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 37, want: 2701}, test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 41, want: 2993}, test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 41, want: 2993}, test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 45, want: 3285}, test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 45, want: 3285}, test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 73, want: 5329}, test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 73, want: 5329}, test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 81, want: 5913}, test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 81, want: 5913}, test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 3, want: 243}, test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 3, want: 243}, test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 5, want: 405}, test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 5, want: 405}, test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 7, want: 567}, test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 7, want: 567}, test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 9, want: 729}, test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 9, want: 729}, test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 10, want: 810}, test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 10, want: 810}, test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 11, want: 891}, test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 11, want: 891}, test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 13, want: 1053}, test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 13, want: 1053}, test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 19, want: 1539}, test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 19, want: 1539}, test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 21, want: 1701}, test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 21, want: 1701}, test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 25, want: 2025}, test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 25, want: 2025}, test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 27, want: 2187}, test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 27, want: 2187}, test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 37, want: 2997}, test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 37, want: 2997}, test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 41, want: 3321}, test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 41, want: 3321}, test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 45, want: 3645}, test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 45, want: 3645}, test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 73, want: 5913}, test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 73, want: 5913}, test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 81, want: 6561}, test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 81, want: 6561}} type test_int32 struct { fn func(int32) int32 fnname string in int32 want int32 } var tests_int32 = []test_int32{ test_int32{fn: add_Neg2147483648_int32, fnname: "add_Neg2147483648_int32", in: -2147483648, want: 0}, test_int32{fn: add_int32_Neg2147483648, fnname: "add_int32_Neg2147483648", in: -2147483648, want: 0}, test_int32{fn: add_Neg2147483648_int32, fnname: "add_Neg2147483648_int32", in: -2147483647, want: 1}, test_int32{fn: add_int32_Neg2147483648, fnname: "add_int32_Neg2147483648", in: -2147483647, want: 1}, test_int32{fn: add_Neg2147483648_int32, fnname: "add_Neg2147483648_int32", in: -1, want: 2147483647}, test_int32{fn: add_int32_Neg2147483648, fnname: "add_int32_Neg2147483648", in: -1, want: 2147483647}, test_int32{fn: add_Neg2147483648_int32, fnname: "add_Neg2147483648_int32", in: 0, want: -2147483648}, test_int32{fn: add_int32_Neg2147483648, fnname: "add_int32_Neg2147483648", in: 0, want: -2147483648}, test_int32{fn: add_Neg2147483648_int32, fnname: "add_Neg2147483648_int32", in: 1, want: -2147483647}, test_int32{fn: add_int32_Neg2147483648, fnname: "add_int32_Neg2147483648", in: 1, want: -2147483647}, test_int32{fn: add_Neg2147483648_int32, fnname: "add_Neg2147483648_int32", in: 2147483647, want: -1}, test_int32{fn: add_int32_Neg2147483648, fnname: "add_int32_Neg2147483648", in: 2147483647, want: -1}, test_int32{fn: add_Neg2147483647_int32, fnname: "add_Neg2147483647_int32", in: -2147483648, want: 1}, test_int32{fn: add_int32_Neg2147483647, fnname: "add_int32_Neg2147483647", in: -2147483648, want: 1}, test_int32{fn: add_Neg2147483647_int32, fnname: "add_Neg2147483647_int32", in: -2147483647, want: 2}, test_int32{fn: add_int32_Neg2147483647, fnname: "add_int32_Neg2147483647", in: -2147483647, want: 2}, test_int32{fn: add_Neg2147483647_int32, fnname: "add_Neg2147483647_int32", in: -1, want: -2147483648}, test_int32{fn: add_int32_Neg2147483647, fnname: "add_int32_Neg2147483647", in: -1, want: -2147483648}, test_int32{fn: add_Neg2147483647_int32, fnname: "add_Neg2147483647_int32", in: 0, want: -2147483647}, test_int32{fn: add_int32_Neg2147483647, fnname: "add_int32_Neg2147483647", in: 0, want: -2147483647}, test_int32{fn: add_Neg2147483647_int32, fnname: "add_Neg2147483647_int32", in: 1, want: -2147483646}, test_int32{fn: add_int32_Neg2147483647, fnname: "add_int32_Neg2147483647", in: 1, want: -2147483646}, test_int32{fn: add_Neg2147483647_int32, fnname: "add_Neg2147483647_int32", in: 2147483647, want: 0}, test_int32{fn: add_int32_Neg2147483647, fnname: "add_int32_Neg2147483647", in: 2147483647, want: 0}, test_int32{fn: add_Neg1_int32, fnname: "add_Neg1_int32", in: -2147483648, want: 2147483647}, test_int32{fn: add_int32_Neg1, fnname: "add_int32_Neg1", in: -2147483648, want: 2147483647}, test_int32{fn: add_Neg1_int32, fnname: "add_Neg1_int32", in: -2147483647, want: -2147483648}, test_int32{fn: add_int32_Neg1, fnname: "add_int32_Neg1", in: -2147483647, want: -2147483648}, test_int32{fn: add_Neg1_int32, fnname: "add_Neg1_int32", in: -1, want: -2}, test_int32{fn: add_int32_Neg1, fnname: "add_int32_Neg1", in: -1, want: -2}, test_int32{fn: add_Neg1_int32, fnname: "add_Neg1_int32", in: 0, want: -1}, test_int32{fn: add_int32_Neg1, fnname: "add_int32_Neg1", in: 0, want: -1}, test_int32{fn: add_Neg1_int32, fnname: "add_Neg1_int32", in: 1, want: 0}, test_int32{fn: add_int32_Neg1, fnname: "add_int32_Neg1", in: 1, want: 0}, test_int32{fn: add_Neg1_int32, fnname: "add_Neg1_int32", in: 2147483647, want: 2147483646}, test_int32{fn: add_int32_Neg1, fnname: "add_int32_Neg1", in: 2147483647, want: 2147483646}, test_int32{fn: add_0_int32, fnname: "add_0_int32", in: -2147483648, want: -2147483648}, test_int32{fn: add_int32_0, fnname: "add_int32_0", in: -2147483648, want: -2147483648}, test_int32{fn: add_0_int32, fnname: "add_0_int32", in: -2147483647, want: -2147483647}, test_int32{fn: add_int32_0, fnname: "add_int32_0", in: -2147483647, want: -2147483647}, test_int32{fn: add_0_int32, fnname: "add_0_int32", in: -1, want: -1}, test_int32{fn: add_int32_0, fnname: "add_int32_0", in: -1, want: -1}, test_int32{fn: add_0_int32, fnname: "add_0_int32", in: 0, want: 0}, test_int32{fn: add_int32_0, fnname: "add_int32_0", in: 0, want: 0}, test_int32{fn: add_0_int32, fnname: "add_0_int32", in: 1, want: 1}, test_int32{fn: add_int32_0, fnname: "add_int32_0", in: 1, want: 1}, test_int32{fn: add_0_int32, fnname: "add_0_int32", in: 2147483647, want: 2147483647}, test_int32{fn: add_int32_0, fnname: "add_int32_0", in: 2147483647, want: 2147483647}, test_int32{fn: add_1_int32, fnname: "add_1_int32", in: -2147483648, want: -2147483647}, test_int32{fn: add_int32_1, fnname: "add_int32_1", in: -2147483648, want: -2147483647}, test_int32{fn: add_1_int32, fnname: "add_1_int32", in: -2147483647, want: -2147483646}, test_int32{fn: add_int32_1, fnname: "add_int32_1", in: -2147483647, want: -2147483646}, test_int32{fn: add_1_int32, fnname: "add_1_int32", in: -1, want: 0}, test_int32{fn: add_int32_1, fnname: "add_int32_1", in: -1, want: 0}, test_int32{fn: add_1_int32, fnname: "add_1_int32", in: 0, want: 1}, test_int32{fn: add_int32_1, fnname: "add_int32_1", in: 0, want: 1}, test_int32{fn: add_1_int32, fnname: "add_1_int32", in: 1, want: 2}, test_int32{fn: add_int32_1, fnname: "add_int32_1", in: 1, want: 2}, test_int32{fn: add_1_int32, fnname: "add_1_int32", in: 2147483647, want: -2147483648}, test_int32{fn: add_int32_1, fnname: "add_int32_1", in: 2147483647, want: -2147483648}, test_int32{fn: add_2147483647_int32, fnname: "add_2147483647_int32", in: -2147483648, want: -1}, test_int32{fn: add_int32_2147483647, fnname: "add_int32_2147483647", in: -2147483648, want: -1}, test_int32{fn: add_2147483647_int32, fnname: "add_2147483647_int32", in: -2147483647, want: 0}, test_int32{fn: add_int32_2147483647, fnname: "add_int32_2147483647", in: -2147483647, want: 0}, test_int32{fn: add_2147483647_int32, fnname: "add_2147483647_int32", in: -1, want: 2147483646}, test_int32{fn: add_int32_2147483647, fnname: "add_int32_2147483647", in: -1, want: 2147483646}, test_int32{fn: add_2147483647_int32, fnname: "add_2147483647_int32", in: 0, want: 2147483647}, test_int32{fn: add_int32_2147483647, fnname: "add_int32_2147483647", in: 0, want: 2147483647}, test_int32{fn: add_2147483647_int32, fnname: "add_2147483647_int32", in: 1, want: -2147483648}, test_int32{fn: add_int32_2147483647, fnname: "add_int32_2147483647", in: 1, want: -2147483648}, test_int32{fn: add_2147483647_int32, fnname: "add_2147483647_int32", in: 2147483647, want: -2}, test_int32{fn: add_int32_2147483647, fnname: "add_int32_2147483647", in: 2147483647, want: -2}, test_int32{fn: sub_Neg2147483648_int32, fnname: "sub_Neg2147483648_int32", in: -2147483648, want: 0}, test_int32{fn: sub_int32_Neg2147483648, fnname: "sub_int32_Neg2147483648", in: -2147483648, want: 0}, test_int32{fn: sub_Neg2147483648_int32, fnname: "sub_Neg2147483648_int32", in: -2147483647, want: -1}, test_int32{fn: sub_int32_Neg2147483648, fnname: "sub_int32_Neg2147483648", in: -2147483647, want: 1}, test_int32{fn: sub_Neg2147483648_int32, fnname: "sub_Neg2147483648_int32", in: -1, want: -2147483647}, test_int32{fn: sub_int32_Neg2147483648, fnname: "sub_int32_Neg2147483648", in: -1, want: 2147483647}, test_int32{fn: sub_Neg2147483648_int32, fnname: "sub_Neg2147483648_int32", in: 0, want: -2147483648}, test_int32{fn: sub_int32_Neg2147483648, fnname: "sub_int32_Neg2147483648", in: 0, want: -2147483648}, test_int32{fn: sub_Neg2147483648_int32, fnname: "sub_Neg2147483648_int32", in: 1, want: 2147483647}, test_int32{fn: sub_int32_Neg2147483648, fnname: "sub_int32_Neg2147483648", in: 1, want: -2147483647}, test_int32{fn: sub_Neg2147483648_int32, fnname: "sub_Neg2147483648_int32", in: 2147483647, want: 1}, test_int32{fn: sub_int32_Neg2147483648, fnname: "sub_int32_Neg2147483648", in: 2147483647, want: -1}, test_int32{fn: sub_Neg2147483647_int32, fnname: "sub_Neg2147483647_int32", in: -2147483648, want: 1}, test_int32{fn: sub_int32_Neg2147483647, fnname: "sub_int32_Neg2147483647", in: -2147483648, want: -1}, test_int32{fn: sub_Neg2147483647_int32, fnname: "sub_Neg2147483647_int32", in: -2147483647, want: 0}, test_int32{fn: sub_int32_Neg2147483647, fnname: "sub_int32_Neg2147483647", in: -2147483647, want: 0}, test_int32{fn: sub_Neg2147483647_int32, fnname: "sub_Neg2147483647_int32", in: -1, want: -2147483646}, test_int32{fn: sub_int32_Neg2147483647, fnname: "sub_int32_Neg2147483647", in: -1, want: 2147483646}, test_int32{fn: sub_Neg2147483647_int32, fnname: "sub_Neg2147483647_int32", in: 0, want: -2147483647}, test_int32{fn: sub_int32_Neg2147483647, fnname: "sub_int32_Neg2147483647", in: 0, want: 2147483647}, test_int32{fn: sub_Neg2147483647_int32, fnname: "sub_Neg2147483647_int32", in: 1, want: -2147483648}, test_int32{fn: sub_int32_Neg2147483647, fnname: "sub_int32_Neg2147483647", in: 1, want: -2147483648}, test_int32{fn: sub_Neg2147483647_int32, fnname: "sub_Neg2147483647_int32", in: 2147483647, want: 2}, test_int32{fn: sub_int32_Neg2147483647, fnname: "sub_int32_Neg2147483647", in: 2147483647, want: -2}, test_int32{fn: sub_Neg1_int32, fnname: "sub_Neg1_int32", in: -2147483648, want: 2147483647}, test_int32{fn: sub_int32_Neg1, fnname: "sub_int32_Neg1", in: -2147483648, want: -2147483647}, test_int32{fn: sub_Neg1_int32, fnname: "sub_Neg1_int32", in: -2147483647, want: 2147483646}, test_int32{fn: sub_int32_Neg1, fnname: "sub_int32_Neg1", in: -2147483647, want: -2147483646}, test_int32{fn: sub_Neg1_int32, fnname: "sub_Neg1_int32", in: -1, want: 0}, test_int32{fn: sub_int32_Neg1, fnname: "sub_int32_Neg1", in: -1, want: 0}, test_int32{fn: sub_Neg1_int32, fnname: "sub_Neg1_int32", in: 0, want: -1}, test_int32{fn: sub_int32_Neg1, fnname: "sub_int32_Neg1", in: 0, want: 1}, test_int32{fn: sub_Neg1_int32, fnname: "sub_Neg1_int32", in: 1, want: -2}, test_int32{fn: sub_int32_Neg1, fnname: "sub_int32_Neg1", in: 1, want: 2}, test_int32{fn: sub_Neg1_int32, fnname: "sub_Neg1_int32", in: 2147483647, want: -2147483648}, test_int32{fn: sub_int32_Neg1, fnname: "sub_int32_Neg1", in: 2147483647, want: -2147483648}, test_int32{fn: sub_0_int32, fnname: "sub_0_int32", in: -2147483648, want: -2147483648}, test_int32{fn: sub_int32_0, fnname: "sub_int32_0", in: -2147483648, want: -2147483648}, test_int32{fn: sub_0_int32, fnname: "sub_0_int32", in: -2147483647, want: 2147483647}, test_int32{fn: sub_int32_0, fnname: "sub_int32_0", in: -2147483647, want: -2147483647}, test_int32{fn: sub_0_int32, fnname: "sub_0_int32", in: -1, want: 1}, test_int32{fn: sub_int32_0, fnname: "sub_int32_0", in: -1, want: -1}, test_int32{fn: sub_0_int32, fnname: "sub_0_int32", in: 0, want: 0}, test_int32{fn: sub_int32_0, fnname: "sub_int32_0", in: 0, want: 0}, test_int32{fn: sub_0_int32, fnname: "sub_0_int32", in: 1, want: -1}, test_int32{fn: sub_int32_0, fnname: "sub_int32_0", in: 1, want: 1}, test_int32{fn: sub_0_int32, fnname: "sub_0_int32", in: 2147483647, want: -2147483647}, test_int32{fn: sub_int32_0, fnname: "sub_int32_0", in: 2147483647, want: 2147483647}, test_int32{fn: sub_1_int32, fnname: "sub_1_int32", in: -2147483648, want: -2147483647}, test_int32{fn: sub_int32_1, fnname: "sub_int32_1", in: -2147483648, want: 2147483647}, test_int32{fn: sub_1_int32, fnname: "sub_1_int32", in: -2147483647, want: -2147483648}, test_int32{fn: sub_int32_1, fnname: "sub_int32_1", in: -2147483647, want: -2147483648}, test_int32{fn: sub_1_int32, fnname: "sub_1_int32", in: -1, want: 2}, test_int32{fn: sub_int32_1, fnname: "sub_int32_1", in: -1, want: -2}, test_int32{fn: sub_1_int32, fnname: "sub_1_int32", in: 0, want: 1}, test_int32{fn: sub_int32_1, fnname: "sub_int32_1", in: 0, want: -1}, test_int32{fn: sub_1_int32, fnname: "sub_1_int32", in: 1, want: 0}, test_int32{fn: sub_int32_1, fnname: "sub_int32_1", in: 1, want: 0}, test_int32{fn: sub_1_int32, fnname: "sub_1_int32", in: 2147483647, want: -2147483646}, test_int32{fn: sub_int32_1, fnname: "sub_int32_1", in: 2147483647, want: 2147483646}, test_int32{fn: sub_2147483647_int32, fnname: "sub_2147483647_int32", in: -2147483648, want: -1}, test_int32{fn: sub_int32_2147483647, fnname: "sub_int32_2147483647", in: -2147483648, want: 1}, test_int32{fn: sub_2147483647_int32, fnname: "sub_2147483647_int32", in: -2147483647, want: -2}, test_int32{fn: sub_int32_2147483647, fnname: "sub_int32_2147483647", in: -2147483647, want: 2}, test_int32{fn: sub_2147483647_int32, fnname: "sub_2147483647_int32", in: -1, want: -2147483648}, test_int32{fn: sub_int32_2147483647, fnname: "sub_int32_2147483647", in: -1, want: -2147483648}, test_int32{fn: sub_2147483647_int32, fnname: "sub_2147483647_int32", in: 0, want: 2147483647}, test_int32{fn: sub_int32_2147483647, fnname: "sub_int32_2147483647", in: 0, want: -2147483647}, test_int32{fn: sub_2147483647_int32, fnname: "sub_2147483647_int32", in: 1, want: 2147483646}, test_int32{fn: sub_int32_2147483647, fnname: "sub_int32_2147483647", in: 1, want: -2147483646}, test_int32{fn: sub_2147483647_int32, fnname: "sub_2147483647_int32", in: 2147483647, want: 0}, test_int32{fn: sub_int32_2147483647, fnname: "sub_int32_2147483647", in: 2147483647, want: 0}, test_int32{fn: div_Neg2147483648_int32, fnname: "div_Neg2147483648_int32", in: -2147483648, want: 1}, test_int32{fn: div_int32_Neg2147483648, fnname: "div_int32_Neg2147483648", in: -2147483648, want: 1}, test_int32{fn: div_Neg2147483648_int32, fnname: "div_Neg2147483648_int32", in: -2147483647, want: 1}, test_int32{fn: div_int32_Neg2147483648, fnname: "div_int32_Neg2147483648", in: -2147483647, want: 0}, test_int32{fn: div_Neg2147483648_int32, fnname: "div_Neg2147483648_int32", in: -1, want: -2147483648}, test_int32{fn: div_int32_Neg2147483648, fnname: "div_int32_Neg2147483648", in: -1, want: 0}, test_int32{fn: div_int32_Neg2147483648, fnname: "div_int32_Neg2147483648", in: 0, want: 0}, test_int32{fn: div_Neg2147483648_int32, fnname: "div_Neg2147483648_int32", in: 1, want: -2147483648}, test_int32{fn: div_int32_Neg2147483648, fnname: "div_int32_Neg2147483648", in: 1, want: 0}, test_int32{fn: div_Neg2147483648_int32, fnname: "div_Neg2147483648_int32", in: 2147483647, want: -1}, test_int32{fn: div_int32_Neg2147483648, fnname: "div_int32_Neg2147483648", in: 2147483647, want: 0}, test_int32{fn: div_Neg2147483647_int32, fnname: "div_Neg2147483647_int32", in: -2147483648, want: 0}, test_int32{fn: div_int32_Neg2147483647, fnname: "div_int32_Neg2147483647", in: -2147483648, want: 1}, test_int32{fn: div_Neg2147483647_int32, fnname: "div_Neg2147483647_int32", in: -2147483647, want: 1}, test_int32{fn: div_int32_Neg2147483647, fnname: "div_int32_Neg2147483647", in: -2147483647, want: 1}, test_int32{fn: div_Neg2147483647_int32, fnname: "div_Neg2147483647_int32", in: -1, want: 2147483647}, test_int32{fn: div_int32_Neg2147483647, fnname: "div_int32_Neg2147483647", in: -1, want: 0}, test_int32{fn: div_int32_Neg2147483647, fnname: "div_int32_Neg2147483647", in: 0, want: 0}, test_int32{fn: div_Neg2147483647_int32, fnname: "div_Neg2147483647_int32", in: 1, want: -2147483647}, test_int32{fn: div_int32_Neg2147483647, fnname: "div_int32_Neg2147483647", in: 1, want: 0}, test_int32{fn: div_Neg2147483647_int32, fnname: "div_Neg2147483647_int32", in: 2147483647, want: -1}, test_int32{fn: div_int32_Neg2147483647, fnname: "div_int32_Neg2147483647", in: 2147483647, want: -1}, test_int32{fn: div_Neg1_int32, fnname: "div_Neg1_int32", in: -2147483648, want: 0}, test_int32{fn: div_int32_Neg1, fnname: "div_int32_Neg1", in: -2147483648, want: -2147483648}, test_int32{fn: div_Neg1_int32, fnname: "div_Neg1_int32", in: -2147483647, want: 0}, test_int32{fn: div_int32_Neg1, fnname: "div_int32_Neg1", in: -2147483647, want: 2147483647}, test_int32{fn: div_Neg1_int32, fnname: "div_Neg1_int32", in: -1, want: 1}, test_int32{fn: div_int32_Neg1, fnname: "div_int32_Neg1", in: -1, want: 1}, test_int32{fn: div_int32_Neg1, fnname: "div_int32_Neg1", in: 0, want: 0}, test_int32{fn: div_Neg1_int32, fnname: "div_Neg1_int32", in: 1, want: -1}, test_int32{fn: div_int32_Neg1, fnname: "div_int32_Neg1", in: 1, want: -1}, test_int32{fn: div_Neg1_int32, fnname: "div_Neg1_int32", in: 2147483647, want: 0}, test_int32{fn: div_int32_Neg1, fnname: "div_int32_Neg1", in: 2147483647, want: -2147483647}, test_int32{fn: div_0_int32, fnname: "div_0_int32", in: -2147483648, want: 0}, test_int32{fn: div_0_int32, fnname: "div_0_int32", in: -2147483647, want: 0}, test_int32{fn: div_0_int32, fnname: "div_0_int32", in: -1, want: 0}, test_int32{fn: div_0_int32, fnname: "div_0_int32", in: 1, want: 0}, test_int32{fn: div_0_int32, fnname: "div_0_int32", in: 2147483647, want: 0}, test_int32{fn: div_1_int32, fnname: "div_1_int32", in: -2147483648, want: 0}, test_int32{fn: div_int32_1, fnname: "div_int32_1", in: -2147483648, want: -2147483648}, test_int32{fn: div_1_int32, fnname: "div_1_int32", in: -2147483647, want: 0}, test_int32{fn: div_int32_1, fnname: "div_int32_1", in: -2147483647, want: -2147483647}, test_int32{fn: div_1_int32, fnname: "div_1_int32", in: -1, want: -1}, test_int32{fn: div_int32_1, fnname: "div_int32_1", in: -1, want: -1}, test_int32{fn: div_int32_1, fnname: "div_int32_1", in: 0, want: 0}, test_int32{fn: div_1_int32, fnname: "div_1_int32", in: 1, want: 1}, test_int32{fn: div_int32_1, fnname: "div_int32_1", in: 1, want: 1}, test_int32{fn: div_1_int32, fnname: "div_1_int32", in: 2147483647, want: 0}, test_int32{fn: div_int32_1, fnname: "div_int32_1", in: 2147483647, want: 2147483647}, test_int32{fn: div_2147483647_int32, fnname: "div_2147483647_int32", in: -2147483648, want: 0}, test_int32{fn: div_int32_2147483647, fnname: "div_int32_2147483647", in: -2147483648, want: -1}, test_int32{fn: div_2147483647_int32, fnname: "div_2147483647_int32", in: -2147483647, want: -1}, test_int32{fn: div_int32_2147483647, fnname: "div_int32_2147483647", in: -2147483647, want: -1}, test_int32{fn: div_2147483647_int32, fnname: "div_2147483647_int32", in: -1, want: -2147483647}, test_int32{fn: div_int32_2147483647, fnname: "div_int32_2147483647", in: -1, want: 0}, test_int32{fn: div_int32_2147483647, fnname: "div_int32_2147483647", in: 0, want: 0}, test_int32{fn: div_2147483647_int32, fnname: "div_2147483647_int32", in: 1, want: 2147483647}, test_int32{fn: div_int32_2147483647, fnname: "div_int32_2147483647", in: 1, want: 0}, test_int32{fn: div_2147483647_int32, fnname: "div_2147483647_int32", in: 2147483647, want: 1}, test_int32{fn: div_int32_2147483647, fnname: "div_int32_2147483647", in: 2147483647, want: 1}, test_int32{fn: mul_Neg2147483648_int32, fnname: "mul_Neg2147483648_int32", in: -2147483648, want: 0}, test_int32{fn: mul_int32_Neg2147483648, fnname: "mul_int32_Neg2147483648", in: -2147483648, want: 0}, test_int32{fn: mul_Neg2147483648_int32, fnname: "mul_Neg2147483648_int32", in: -2147483647, want: -2147483648}, test_int32{fn: mul_int32_Neg2147483648, fnname: "mul_int32_Neg2147483648", in: -2147483647, want: -2147483648}, test_int32{fn: mul_Neg2147483648_int32, fnname: "mul_Neg2147483648_int32", in: -1, want: -2147483648}, test_int32{fn: mul_int32_Neg2147483648, fnname: "mul_int32_Neg2147483648", in: -1, want: -2147483648}, test_int32{fn: mul_Neg2147483648_int32, fnname: "mul_Neg2147483648_int32", in: 0, want: 0}, test_int32{fn: mul_int32_Neg2147483648, fnname: "mul_int32_Neg2147483648", in: 0, want: 0}, test_int32{fn: mul_Neg2147483648_int32, fnname: "mul_Neg2147483648_int32", in: 1, want: -2147483648}, test_int32{fn: mul_int32_Neg2147483648, fnname: "mul_int32_Neg2147483648", in: 1, want: -2147483648}, test_int32{fn: mul_Neg2147483648_int32, fnname: "mul_Neg2147483648_int32", in: 2147483647, want: -2147483648}, test_int32{fn: mul_int32_Neg2147483648, fnname: "mul_int32_Neg2147483648", in: 2147483647, want: -2147483648}, test_int32{fn: mul_Neg2147483647_int32, fnname: "mul_Neg2147483647_int32", in: -2147483648, want: -2147483648}, test_int32{fn: mul_int32_Neg2147483647, fnname: "mul_int32_Neg2147483647", in: -2147483648, want: -2147483648}, test_int32{fn: mul_Neg2147483647_int32, fnname: "mul_Neg2147483647_int32", in: -2147483647, want: 1}, test_int32{fn: mul_int32_Neg2147483647, fnname: "mul_int32_Neg2147483647", in: -2147483647, want: 1}, test_int32{fn: mul_Neg2147483647_int32, fnname: "mul_Neg2147483647_int32", in: -1, want: 2147483647}, test_int32{fn: mul_int32_Neg2147483647, fnname: "mul_int32_Neg2147483647", in: -1, want: 2147483647}, test_int32{fn: mul_Neg2147483647_int32, fnname: "mul_Neg2147483647_int32", in: 0, want: 0}, test_int32{fn: mul_int32_Neg2147483647, fnname: "mul_int32_Neg2147483647", in: 0, want: 0}, test_int32{fn: mul_Neg2147483647_int32, fnname: "mul_Neg2147483647_int32", in: 1, want: -2147483647}, test_int32{fn: mul_int32_Neg2147483647, fnname: "mul_int32_Neg2147483647", in: 1, want: -2147483647}, test_int32{fn: mul_Neg2147483647_int32, fnname: "mul_Neg2147483647_int32", in: 2147483647, want: -1}, test_int32{fn: mul_int32_Neg2147483647, fnname: "mul_int32_Neg2147483647", in: 2147483647, want: -1}, test_int32{fn: mul_Neg1_int32, fnname: "mul_Neg1_int32", in: -2147483648, want: -2147483648}, test_int32{fn: mul_int32_Neg1, fnname: "mul_int32_Neg1", in: -2147483648, want: -2147483648}, test_int32{fn: mul_Neg1_int32, fnname: "mul_Neg1_int32", in: -2147483647, want: 2147483647}, test_int32{fn: mul_int32_Neg1, fnname: "mul_int32_Neg1", in: -2147483647, want: 2147483647}, test_int32{fn: mul_Neg1_int32, fnname: "mul_Neg1_int32", in: -1, want: 1}, test_int32{fn: mul_int32_Neg1, fnname: "mul_int32_Neg1", in: -1, want: 1}, test_int32{fn: mul_Neg1_int32, fnname: "mul_Neg1_int32", in: 0, want: 0}, test_int32{fn: mul_int32_Neg1, fnname: "mul_int32_Neg1", in: 0, want: 0}, test_int32{fn: mul_Neg1_int32, fnname: "mul_Neg1_int32", in: 1, want: -1}, test_int32{fn: mul_int32_Neg1, fnname: "mul_int32_Neg1", in: 1, want: -1}, test_int32{fn: mul_Neg1_int32, fnname: "mul_Neg1_int32", in: 2147483647, want: -2147483647}, test_int32{fn: mul_int32_Neg1, fnname: "mul_int32_Neg1", in: 2147483647, want: -2147483647}, test_int32{fn: mul_0_int32, fnname: "mul_0_int32", in: -2147483648, want: 0}, test_int32{fn: mul_int32_0, fnname: "mul_int32_0", in: -2147483648, want: 0}, test_int32{fn: mul_0_int32, fnname: "mul_0_int32", in: -2147483647, want: 0}, test_int32{fn: mul_int32_0, fnname: "mul_int32_0", in: -2147483647, want: 0}, test_int32{fn: mul_0_int32, fnname: "mul_0_int32", in: -1, want: 0}, test_int32{fn: mul_int32_0, fnname: "mul_int32_0", in: -1, want: 0}, test_int32{fn: mul_0_int32, fnname: "mul_0_int32", in: 0, want: 0}, test_int32{fn: mul_int32_0, fnname: "mul_int32_0", in: 0, want: 0}, test_int32{fn: mul_0_int32, fnname: "mul_0_int32", in: 1, want: 0}, test_int32{fn: mul_int32_0, fnname: "mul_int32_0", in: 1, want: 0}, test_int32{fn: mul_0_int32, fnname: "mul_0_int32", in: 2147483647, want: 0}, test_int32{fn: mul_int32_0, fnname: "mul_int32_0", in: 2147483647, want: 0}, test_int32{fn: mul_1_int32, fnname: "mul_1_int32", in: -2147483648, want: -2147483648}, test_int32{fn: mul_int32_1, fnname: "mul_int32_1", in: -2147483648, want: -2147483648}, test_int32{fn: mul_1_int32, fnname: "mul_1_int32", in: -2147483647, want: -2147483647}, test_int32{fn: mul_int32_1, fnname: "mul_int32_1", in: -2147483647, want: -2147483647}, test_int32{fn: mul_1_int32, fnname: "mul_1_int32", in: -1, want: -1}, test_int32{fn: mul_int32_1, fnname: "mul_int32_1", in: -1, want: -1}, test_int32{fn: mul_1_int32, fnname: "mul_1_int32", in: 0, want: 0}, test_int32{fn: mul_int32_1, fnname: "mul_int32_1", in: 0, want: 0}, test_int32{fn: mul_1_int32, fnname: "mul_1_int32", in: 1, want: 1}, test_int32{fn: mul_int32_1, fnname: "mul_int32_1", in: 1, want: 1}, test_int32{fn: mul_1_int32, fnname: "mul_1_int32", in: 2147483647, want: 2147483647}, test_int32{fn: mul_int32_1, fnname: "mul_int32_1", in: 2147483647, want: 2147483647}, test_int32{fn: mul_2147483647_int32, fnname: "mul_2147483647_int32", in: -2147483648, want: -2147483648}, test_int32{fn: mul_int32_2147483647, fnname: "mul_int32_2147483647", in: -2147483648, want: -2147483648}, test_int32{fn: mul_2147483647_int32, fnname: "mul_2147483647_int32", in: -2147483647, want: -1}, test_int32{fn: mul_int32_2147483647, fnname: "mul_int32_2147483647", in: -2147483647, want: -1}, test_int32{fn: mul_2147483647_int32, fnname: "mul_2147483647_int32", in: -1, want: -2147483647}, test_int32{fn: mul_int32_2147483647, fnname: "mul_int32_2147483647", in: -1, want: -2147483647}, test_int32{fn: mul_2147483647_int32, fnname: "mul_2147483647_int32", in: 0, want: 0}, test_int32{fn: mul_int32_2147483647, fnname: "mul_int32_2147483647", in: 0, want: 0}, test_int32{fn: mul_2147483647_int32, fnname: "mul_2147483647_int32", in: 1, want: 2147483647}, test_int32{fn: mul_int32_2147483647, fnname: "mul_int32_2147483647", in: 1, want: 2147483647}, test_int32{fn: mul_2147483647_int32, fnname: "mul_2147483647_int32", in: 2147483647, want: 1}, test_int32{fn: mul_int32_2147483647, fnname: "mul_int32_2147483647", in: 2147483647, want: 1}, test_int32{fn: mod_Neg2147483648_int32, fnname: "mod_Neg2147483648_int32", in: -2147483648, want: 0}, test_int32{fn: mod_int32_Neg2147483648, fnname: "mod_int32_Neg2147483648", in: -2147483648, want: 0}, test_int32{fn: mod_Neg2147483648_int32, fnname: "mod_Neg2147483648_int32", in: -2147483647, want: -1}, test_int32{fn: mod_int32_Neg2147483648, fnname: "mod_int32_Neg2147483648", in: -2147483647, want: -2147483647}, test_int32{fn: mod_Neg2147483648_int32, fnname: "mod_Neg2147483648_int32", in: -1, want: 0}, test_int32{fn: mod_int32_Neg2147483648, fnname: "mod_int32_Neg2147483648", in: -1, want: -1}, test_int32{fn: mod_int32_Neg2147483648, fnname: "mod_int32_Neg2147483648", in: 0, want: 0}, test_int32{fn: mod_Neg2147483648_int32, fnname: "mod_Neg2147483648_int32", in: 1, want: 0}, test_int32{fn: mod_int32_Neg2147483648, fnname: "mod_int32_Neg2147483648", in: 1, want: 1}, test_int32{fn: mod_Neg2147483648_int32, fnname: "mod_Neg2147483648_int32", in: 2147483647, want: -1}, test_int32{fn: mod_int32_Neg2147483648, fnname: "mod_int32_Neg2147483648", in: 2147483647, want: 2147483647}, test_int32{fn: mod_Neg2147483647_int32, fnname: "mod_Neg2147483647_int32", in: -2147483648, want: -2147483647}, test_int32{fn: mod_int32_Neg2147483647, fnname: "mod_int32_Neg2147483647", in: -2147483648, want: -1}, test_int32{fn: mod_Neg2147483647_int32, fnname: "mod_Neg2147483647_int32", in: -2147483647, want: 0}, test_int32{fn: mod_int32_Neg2147483647, fnname: "mod_int32_Neg2147483647", in: -2147483647, want: 0}, test_int32{fn: mod_Neg2147483647_int32, fnname: "mod_Neg2147483647_int32", in: -1, want: 0}, test_int32{fn: mod_int32_Neg2147483647, fnname: "mod_int32_Neg2147483647", in: -1, want: -1}, test_int32{fn: mod_int32_Neg2147483647, fnname: "mod_int32_Neg2147483647", in: 0, want: 0}, test_int32{fn: mod_Neg2147483647_int32, fnname: "mod_Neg2147483647_int32", in: 1, want: 0}, test_int32{fn: mod_int32_Neg2147483647, fnname: "mod_int32_Neg2147483647", in: 1, want: 1}, test_int32{fn: mod_Neg2147483647_int32, fnname: "mod_Neg2147483647_int32", in: 2147483647, want: 0}, test_int32{fn: mod_int32_Neg2147483647, fnname: "mod_int32_Neg2147483647", in: 2147483647, want: 0}, test_int32{fn: mod_Neg1_int32, fnname: "mod_Neg1_int32", in: -2147483648, want: -1}, test_int32{fn: mod_int32_Neg1, fnname: "mod_int32_Neg1", in: -2147483648, want: 0}, test_int32{fn: mod_Neg1_int32, fnname: "mod_Neg1_int32", in: -2147483647, want: -1}, test_int32{fn: mod_int32_Neg1, fnname: "mod_int32_Neg1", in: -2147483647, want: 0}, test_int32{fn: mod_Neg1_int32, fnname: "mod_Neg1_int32", in: -1, want: 0}, test_int32{fn: mod_int32_Neg1, fnname: "mod_int32_Neg1", in: -1, want: 0}, test_int32{fn: mod_int32_Neg1, fnname: "mod_int32_Neg1", in: 0, want: 0}, test_int32{fn: mod_Neg1_int32, fnname: "mod_Neg1_int32", in: 1, want: 0}, test_int32{fn: mod_int32_Neg1, fnname: "mod_int32_Neg1", in: 1, want: 0}, test_int32{fn: mod_Neg1_int32, fnname: "mod_Neg1_int32", in: 2147483647, want: -1}, test_int32{fn: mod_int32_Neg1, fnname: "mod_int32_Neg1", in: 2147483647, want: 0}, test_int32{fn: mod_0_int32, fnname: "mod_0_int32", in: -2147483648, want: 0}, test_int32{fn: mod_0_int32, fnname: "mod_0_int32", in: -2147483647, want: 0}, test_int32{fn: mod_0_int32, fnname: "mod_0_int32", in: -1, want: 0}, test_int32{fn: mod_0_int32, fnname: "mod_0_int32", in: 1, want: 0}, test_int32{fn: mod_0_int32, fnname: "mod_0_int32", in: 2147483647, want: 0}, test_int32{fn: mod_1_int32, fnname: "mod_1_int32", in: -2147483648, want: 1}, test_int32{fn: mod_int32_1, fnname: "mod_int32_1", in: -2147483648, want: 0}, test_int32{fn: mod_1_int32, fnname: "mod_1_int32", in: -2147483647, want: 1}, test_int32{fn: mod_int32_1, fnname: "mod_int32_1", in: -2147483647, want: 0}, test_int32{fn: mod_1_int32, fnname: "mod_1_int32", in: -1, want: 0}, test_int32{fn: mod_int32_1, fnname: "mod_int32_1", in: -1, want: 0}, test_int32{fn: mod_int32_1, fnname: "mod_int32_1", in: 0, want: 0}, test_int32{fn: mod_1_int32, fnname: "mod_1_int32", in: 1, want: 0}, test_int32{fn: mod_int32_1, fnname: "mod_int32_1", in: 1, want: 0}, test_int32{fn: mod_1_int32, fnname: "mod_1_int32", in: 2147483647, want: 1}, test_int32{fn: mod_int32_1, fnname: "mod_int32_1", in: 2147483647, want: 0}, test_int32{fn: mod_2147483647_int32, fnname: "mod_2147483647_int32", in: -2147483648, want: 2147483647}, test_int32{fn: mod_int32_2147483647, fnname: "mod_int32_2147483647", in: -2147483648, want: -1}, test_int32{fn: mod_2147483647_int32, fnname: "mod_2147483647_int32", in: -2147483647, want: 0}, test_int32{fn: mod_int32_2147483647, fnname: "mod_int32_2147483647", in: -2147483647, want: 0}, test_int32{fn: mod_2147483647_int32, fnname: "mod_2147483647_int32", in: -1, want: 0}, test_int32{fn: mod_int32_2147483647, fnname: "mod_int32_2147483647", in: -1, want: -1}, test_int32{fn: mod_int32_2147483647, fnname: "mod_int32_2147483647", in: 0, want: 0}, test_int32{fn: mod_2147483647_int32, fnname: "mod_2147483647_int32", in: 1, want: 0}, test_int32{fn: mod_int32_2147483647, fnname: "mod_int32_2147483647", in: 1, want: 1}, test_int32{fn: mod_2147483647_int32, fnname: "mod_2147483647_int32", in: 2147483647, want: 0}, test_int32{fn: mod_int32_2147483647, fnname: "mod_int32_2147483647", in: 2147483647, want: 0}, test_int32{fn: and_Neg2147483648_int32, fnname: "and_Neg2147483648_int32", in: -2147483648, want: -2147483648}, test_int32{fn: and_int32_Neg2147483648, fnname: "and_int32_Neg2147483648", in: -2147483648, want: -2147483648}, test_int32{fn: and_Neg2147483648_int32, fnname: "and_Neg2147483648_int32", in: -2147483647, want: -2147483648}, test_int32{fn: and_int32_Neg2147483648, fnname: "and_int32_Neg2147483648", in: -2147483647, want: -2147483648}, test_int32{fn: and_Neg2147483648_int32, fnname: "and_Neg2147483648_int32", in: -1, want: -2147483648}, test_int32{fn: and_int32_Neg2147483648, fnname: "and_int32_Neg2147483648", in: -1, want: -2147483648}, test_int32{fn: and_Neg2147483648_int32, fnname: "and_Neg2147483648_int32", in: 0, want: 0}, test_int32{fn: and_int32_Neg2147483648, fnname: "and_int32_Neg2147483648", in: 0, want: 0}, test_int32{fn: and_Neg2147483648_int32, fnname: "and_Neg2147483648_int32", in: 1, want: 0}, test_int32{fn: and_int32_Neg2147483648, fnname: "and_int32_Neg2147483648", in: 1, want: 0}, test_int32{fn: and_Neg2147483648_int32, fnname: "and_Neg2147483648_int32", in: 2147483647, want: 0}, test_int32{fn: and_int32_Neg2147483648, fnname: "and_int32_Neg2147483648", in: 2147483647, want: 0}, test_int32{fn: and_Neg2147483647_int32, fnname: "and_Neg2147483647_int32", in: -2147483648, want: -2147483648}, test_int32{fn: and_int32_Neg2147483647, fnname: "and_int32_Neg2147483647", in: -2147483648, want: -2147483648}, test_int32{fn: and_Neg2147483647_int32, fnname: "and_Neg2147483647_int32", in: -2147483647, want: -2147483647}, test_int32{fn: and_int32_Neg2147483647, fnname: "and_int32_Neg2147483647", in: -2147483647, want: -2147483647}, test_int32{fn: and_Neg2147483647_int32, fnname: "and_Neg2147483647_int32", in: -1, want: -2147483647}, test_int32{fn: and_int32_Neg2147483647, fnname: "and_int32_Neg2147483647", in: -1, want: -2147483647}, test_int32{fn: and_Neg2147483647_int32, fnname: "and_Neg2147483647_int32", in: 0, want: 0}, test_int32{fn: and_int32_Neg2147483647, fnname: "and_int32_Neg2147483647", in: 0, want: 0}, test_int32{fn: and_Neg2147483647_int32, fnname: "and_Neg2147483647_int32", in: 1, want: 1}, test_int32{fn: and_int32_Neg2147483647, fnname: "and_int32_Neg2147483647", in: 1, want: 1}, test_int32{fn: and_Neg2147483647_int32, fnname: "and_Neg2147483647_int32", in: 2147483647, want: 1}, test_int32{fn: and_int32_Neg2147483647, fnname: "and_int32_Neg2147483647", in: 2147483647, want: 1}, test_int32{fn: and_Neg1_int32, fnname: "and_Neg1_int32", in: -2147483648, want: -2147483648}, test_int32{fn: and_int32_Neg1, fnname: "and_int32_Neg1", in: -2147483648, want: -2147483648}, test_int32{fn: and_Neg1_int32, fnname: "and_Neg1_int32", in: -2147483647, want: -2147483647}, test_int32{fn: and_int32_Neg1, fnname: "and_int32_Neg1", in: -2147483647, want: -2147483647}, test_int32{fn: and_Neg1_int32, fnname: "and_Neg1_int32", in: -1, want: -1}, test_int32{fn: and_int32_Neg1, fnname: "and_int32_Neg1", in: -1, want: -1}, test_int32{fn: and_Neg1_int32, fnname: "and_Neg1_int32", in: 0, want: 0}, test_int32{fn: and_int32_Neg1, fnname: "and_int32_Neg1", in: 0, want: 0}, test_int32{fn: and_Neg1_int32, fnname: "and_Neg1_int32", in: 1, want: 1}, test_int32{fn: and_int32_Neg1, fnname: "and_int32_Neg1", in: 1, want: 1}, test_int32{fn: and_Neg1_int32, fnname: "and_Neg1_int32", in: 2147483647, want: 2147483647}, test_int32{fn: and_int32_Neg1, fnname: "and_int32_Neg1", in: 2147483647, want: 2147483647}, test_int32{fn: and_0_int32, fnname: "and_0_int32", in: -2147483648, want: 0}, test_int32{fn: and_int32_0, fnname: "and_int32_0", in: -2147483648, want: 0}, test_int32{fn: and_0_int32, fnname: "and_0_int32", in: -2147483647, want: 0}, test_int32{fn: and_int32_0, fnname: "and_int32_0", in: -2147483647, want: 0}, test_int32{fn: and_0_int32, fnname: "and_0_int32", in: -1, want: 0}, test_int32{fn: and_int32_0, fnname: "and_int32_0", in: -1, want: 0}, test_int32{fn: and_0_int32, fnname: "and_0_int32", in: 0, want: 0}, test_int32{fn: and_int32_0, fnname: "and_int32_0", in: 0, want: 0}, test_int32{fn: and_0_int32, fnname: "and_0_int32", in: 1, want: 0}, test_int32{fn: and_int32_0, fnname: "and_int32_0", in: 1, want: 0}, test_int32{fn: and_0_int32, fnname: "and_0_int32", in: 2147483647, want: 0}, test_int32{fn: and_int32_0, fnname: "and_int32_0", in: 2147483647, want: 0}, test_int32{fn: and_1_int32, fnname: "and_1_int32", in: -2147483648, want: 0}, test_int32{fn: and_int32_1, fnname: "and_int32_1", in: -2147483648, want: 0}, test_int32{fn: and_1_int32, fnname: "and_1_int32", in: -2147483647, want: 1}, test_int32{fn: and_int32_1, fnname: "and_int32_1", in: -2147483647, want: 1}, test_int32{fn: and_1_int32, fnname: "and_1_int32", in: -1, want: 1}, test_int32{fn: and_int32_1, fnname: "and_int32_1", in: -1, want: 1}, test_int32{fn: and_1_int32, fnname: "and_1_int32", in: 0, want: 0}, test_int32{fn: and_int32_1, fnname: "and_int32_1", in: 0, want: 0}, test_int32{fn: and_1_int32, fnname: "and_1_int32", in: 1, want: 1}, test_int32{fn: and_int32_1, fnname: "and_int32_1", in: 1, want: 1}, test_int32{fn: and_1_int32, fnname: "and_1_int32", in: 2147483647, want: 1}, test_int32{fn: and_int32_1, fnname: "and_int32_1", in: 2147483647, want: 1}, test_int32{fn: and_2147483647_int32, fnname: "and_2147483647_int32", in: -2147483648, want: 0}, test_int32{fn: and_int32_2147483647, fnname: "and_int32_2147483647", in: -2147483648, want: 0}, test_int32{fn: and_2147483647_int32, fnname: "and_2147483647_int32", in: -2147483647, want: 1}, test_int32{fn: and_int32_2147483647, fnname: "and_int32_2147483647", in: -2147483647, want: 1}, test_int32{fn: and_2147483647_int32, fnname: "and_2147483647_int32", in: -1, want: 2147483647}, test_int32{fn: and_int32_2147483647, fnname: "and_int32_2147483647", in: -1, want: 2147483647}, test_int32{fn: and_2147483647_int32, fnname: "and_2147483647_int32", in: 0, want: 0}, test_int32{fn: and_int32_2147483647, fnname: "and_int32_2147483647", in: 0, want: 0}, test_int32{fn: and_2147483647_int32, fnname: "and_2147483647_int32", in: 1, want: 1}, test_int32{fn: and_int32_2147483647, fnname: "and_int32_2147483647", in: 1, want: 1}, test_int32{fn: and_2147483647_int32, fnname: "and_2147483647_int32", in: 2147483647, want: 2147483647}, test_int32{fn: and_int32_2147483647, fnname: "and_int32_2147483647", in: 2147483647, want: 2147483647}, test_int32{fn: or_Neg2147483648_int32, fnname: "or_Neg2147483648_int32", in: -2147483648, want: -2147483648}, test_int32{fn: or_int32_Neg2147483648, fnname: "or_int32_Neg2147483648", in: -2147483648, want: -2147483648}, test_int32{fn: or_Neg2147483648_int32, fnname: "or_Neg2147483648_int32", in: -2147483647, want: -2147483647}, test_int32{fn: or_int32_Neg2147483648, fnname: "or_int32_Neg2147483648", in: -2147483647, want: -2147483647}, test_int32{fn: or_Neg2147483648_int32, fnname: "or_Neg2147483648_int32", in: -1, want: -1}, test_int32{fn: or_int32_Neg2147483648, fnname: "or_int32_Neg2147483648", in: -1, want: -1}, test_int32{fn: or_Neg2147483648_int32, fnname: "or_Neg2147483648_int32", in: 0, want: -2147483648}, test_int32{fn: or_int32_Neg2147483648, fnname: "or_int32_Neg2147483648", in: 0, want: -2147483648}, test_int32{fn: or_Neg2147483648_int32, fnname: "or_Neg2147483648_int32", in: 1, want: -2147483647}, test_int32{fn: or_int32_Neg2147483648, fnname: "or_int32_Neg2147483648", in: 1, want: -2147483647}, test_int32{fn: or_Neg2147483648_int32, fnname: "or_Neg2147483648_int32", in: 2147483647, want: -1}, test_int32{fn: or_int32_Neg2147483648, fnname: "or_int32_Neg2147483648", in: 2147483647, want: -1}, test_int32{fn: or_Neg2147483647_int32, fnname: "or_Neg2147483647_int32", in: -2147483648, want: -2147483647}, test_int32{fn: or_int32_Neg2147483647, fnname: "or_int32_Neg2147483647", in: -2147483648, want: -2147483647}, test_int32{fn: or_Neg2147483647_int32, fnname: "or_Neg2147483647_int32", in: -2147483647, want: -2147483647}, test_int32{fn: or_int32_Neg2147483647, fnname: "or_int32_Neg2147483647", in: -2147483647, want: -2147483647}, test_int32{fn: or_Neg2147483647_int32, fnname: "or_Neg2147483647_int32", in: -1, want: -1}, test_int32{fn: or_int32_Neg2147483647, fnname: "or_int32_Neg2147483647", in: -1, want: -1}, test_int32{fn: or_Neg2147483647_int32, fnname: "or_Neg2147483647_int32", in: 0, want: -2147483647}, test_int32{fn: or_int32_Neg2147483647, fnname: "or_int32_Neg2147483647", in: 0, want: -2147483647}, test_int32{fn: or_Neg2147483647_int32, fnname: "or_Neg2147483647_int32", in: 1, want: -2147483647}, test_int32{fn: or_int32_Neg2147483647, fnname: "or_int32_Neg2147483647", in: 1, want: -2147483647}, test_int32{fn: or_Neg2147483647_int32, fnname: "or_Neg2147483647_int32", in: 2147483647, want: -1}, test_int32{fn: or_int32_Neg2147483647, fnname: "or_int32_Neg2147483647", in: 2147483647, want: -1}, test_int32{fn: or_Neg1_int32, fnname: "or_Neg1_int32", in: -2147483648, want: -1}, test_int32{fn: or_int32_Neg1, fnname: "or_int32_Neg1", in: -2147483648, want: -1}, test_int32{fn: or_Neg1_int32, fnname: "or_Neg1_int32", in: -2147483647, want: -1}, test_int32{fn: or_int32_Neg1, fnname: "or_int32_Neg1", in: -2147483647, want: -1}, test_int32{fn: or_Neg1_int32, fnname: "or_Neg1_int32", in: -1, want: -1}, test_int32{fn: or_int32_Neg1, fnname: "or_int32_Neg1", in: -1, want: -1}, test_int32{fn: or_Neg1_int32, fnname: "or_Neg1_int32", in: 0, want: -1}, test_int32{fn: or_int32_Neg1, fnname: "or_int32_Neg1", in: 0, want: -1}, test_int32{fn: or_Neg1_int32, fnname: "or_Neg1_int32", in: 1, want: -1}, test_int32{fn: or_int32_Neg1, fnname: "or_int32_Neg1", in: 1, want: -1}, test_int32{fn: or_Neg1_int32, fnname: "or_Neg1_int32", in: 2147483647, want: -1}, test_int32{fn: or_int32_Neg1, fnname: "or_int32_Neg1", in: 2147483647, want: -1}, test_int32{fn: or_0_int32, fnname: "or_0_int32", in: -2147483648, want: -2147483648}, test_int32{fn: or_int32_0, fnname: "or_int32_0", in: -2147483648, want: -2147483648}, test_int32{fn: or_0_int32, fnname: "or_0_int32", in: -2147483647, want: -2147483647}, test_int32{fn: or_int32_0, fnname: "or_int32_0", in: -2147483647, want: -2147483647}, test_int32{fn: or_0_int32, fnname: "or_0_int32", in: -1, want: -1}, test_int32{fn: or_int32_0, fnname: "or_int32_0", in: -1, want: -1}, test_int32{fn: or_0_int32, fnname: "or_0_int32", in: 0, want: 0}, test_int32{fn: or_int32_0, fnname: "or_int32_0", in: 0, want: 0}, test_int32{fn: or_0_int32, fnname: "or_0_int32", in: 1, want: 1}, test_int32{fn: or_int32_0, fnname: "or_int32_0", in: 1, want: 1}, test_int32{fn: or_0_int32, fnname: "or_0_int32", in: 2147483647, want: 2147483647}, test_int32{fn: or_int32_0, fnname: "or_int32_0", in: 2147483647, want: 2147483647}, test_int32{fn: or_1_int32, fnname: "or_1_int32", in: -2147483648, want: -2147483647}, test_int32{fn: or_int32_1, fnname: "or_int32_1", in: -2147483648, want: -2147483647}, test_int32{fn: or_1_int32, fnname: "or_1_int32", in: -2147483647, want: -2147483647}, test_int32{fn: or_int32_1, fnname: "or_int32_1", in: -2147483647, want: -2147483647}, test_int32{fn: or_1_int32, fnname: "or_1_int32", in: -1, want: -1}, test_int32{fn: or_int32_1, fnname: "or_int32_1", in: -1, want: -1}, test_int32{fn: or_1_int32, fnname: "or_1_int32", in: 0, want: 1}, test_int32{fn: or_int32_1, fnname: "or_int32_1", in: 0, want: 1}, test_int32{fn: or_1_int32, fnname: "or_1_int32", in: 1, want: 1}, test_int32{fn: or_int32_1, fnname: "or_int32_1", in: 1, want: 1}, test_int32{fn: or_1_int32, fnname: "or_1_int32", in: 2147483647, want: 2147483647}, test_int32{fn: or_int32_1, fnname: "or_int32_1", in: 2147483647, want: 2147483647}, test_int32{fn: or_2147483647_int32, fnname: "or_2147483647_int32", in: -2147483648, want: -1}, test_int32{fn: or_int32_2147483647, fnname: "or_int32_2147483647", in: -2147483648, want: -1}, test_int32{fn: or_2147483647_int32, fnname: "or_2147483647_int32", in: -2147483647, want: -1}, test_int32{fn: or_int32_2147483647, fnname: "or_int32_2147483647", in: -2147483647, want: -1}, test_int32{fn: or_2147483647_int32, fnname: "or_2147483647_int32", in: -1, want: -1}, test_int32{fn: or_int32_2147483647, fnname: "or_int32_2147483647", in: -1, want: -1}, test_int32{fn: or_2147483647_int32, fnname: "or_2147483647_int32", in: 0, want: 2147483647}, test_int32{fn: or_int32_2147483647, fnname: "or_int32_2147483647", in: 0, want: 2147483647}, test_int32{fn: or_2147483647_int32, fnname: "or_2147483647_int32", in: 1, want: 2147483647}, test_int32{fn: or_int32_2147483647, fnname: "or_int32_2147483647", in: 1, want: 2147483647}, test_int32{fn: or_2147483647_int32, fnname: "or_2147483647_int32", in: 2147483647, want: 2147483647}, test_int32{fn: or_int32_2147483647, fnname: "or_int32_2147483647", in: 2147483647, want: 2147483647}, test_int32{fn: xor_Neg2147483648_int32, fnname: "xor_Neg2147483648_int32", in: -2147483648, want: 0}, test_int32{fn: xor_int32_Neg2147483648, fnname: "xor_int32_Neg2147483648", in: -2147483648, want: 0}, test_int32{fn: xor_Neg2147483648_int32, fnname: "xor_Neg2147483648_int32", in: -2147483647, want: 1}, test_int32{fn: xor_int32_Neg2147483648, fnname: "xor_int32_Neg2147483648", in: -2147483647, want: 1}, test_int32{fn: xor_Neg2147483648_int32, fnname: "xor_Neg2147483648_int32", in: -1, want: 2147483647}, test_int32{fn: xor_int32_Neg2147483648, fnname: "xor_int32_Neg2147483648", in: -1, want: 2147483647}, test_int32{fn: xor_Neg2147483648_int32, fnname: "xor_Neg2147483648_int32", in: 0, want: -2147483648}, test_int32{fn: xor_int32_Neg2147483648, fnname: "xor_int32_Neg2147483648", in: 0, want: -2147483648}, test_int32{fn: xor_Neg2147483648_int32, fnname: "xor_Neg2147483648_int32", in: 1, want: -2147483647}, test_int32{fn: xor_int32_Neg2147483648, fnname: "xor_int32_Neg2147483648", in: 1, want: -2147483647}, test_int32{fn: xor_Neg2147483648_int32, fnname: "xor_Neg2147483648_int32", in: 2147483647, want: -1}, test_int32{fn: xor_int32_Neg2147483648, fnname: "xor_int32_Neg2147483648", in: 2147483647, want: -1}, test_int32{fn: xor_Neg2147483647_int32, fnname: "xor_Neg2147483647_int32", in: -2147483648, want: 1}, test_int32{fn: xor_int32_Neg2147483647, fnname: "xor_int32_Neg2147483647", in: -2147483648, want: 1}, test_int32{fn: xor_Neg2147483647_int32, fnname: "xor_Neg2147483647_int32", in: -2147483647, want: 0}, test_int32{fn: xor_int32_Neg2147483647, fnname: "xor_int32_Neg2147483647", in: -2147483647, want: 0}, test_int32{fn: xor_Neg2147483647_int32, fnname: "xor_Neg2147483647_int32", in: -1, want: 2147483646}, test_int32{fn: xor_int32_Neg2147483647, fnname: "xor_int32_Neg2147483647", in: -1, want: 2147483646}, test_int32{fn: xor_Neg2147483647_int32, fnname: "xor_Neg2147483647_int32", in: 0, want: -2147483647}, test_int32{fn: xor_int32_Neg2147483647, fnname: "xor_int32_Neg2147483647", in: 0, want: -2147483647}, test_int32{fn: xor_Neg2147483647_int32, fnname: "xor_Neg2147483647_int32", in: 1, want: -2147483648}, test_int32{fn: xor_int32_Neg2147483647, fnname: "xor_int32_Neg2147483647", in: 1, want: -2147483648}, test_int32{fn: xor_Neg2147483647_int32, fnname: "xor_Neg2147483647_int32", in: 2147483647, want: -2}, test_int32{fn: xor_int32_Neg2147483647, fnname: "xor_int32_Neg2147483647", in: 2147483647, want: -2}, test_int32{fn: xor_Neg1_int32, fnname: "xor_Neg1_int32", in: -2147483648, want: 2147483647}, test_int32{fn: xor_int32_Neg1, fnname: "xor_int32_Neg1", in: -2147483648, want: 2147483647}, test_int32{fn: xor_Neg1_int32, fnname: "xor_Neg1_int32", in: -2147483647, want: 2147483646}, test_int32{fn: xor_int32_Neg1, fnname: "xor_int32_Neg1", in: -2147483647, want: 2147483646}, test_int32{fn: xor_Neg1_int32, fnname: "xor_Neg1_int32", in: -1, want: 0}, test_int32{fn: xor_int32_Neg1, fnname: "xor_int32_Neg1", in: -1, want: 0}, test_int32{fn: xor_Neg1_int32, fnname: "xor_Neg1_int32", in: 0, want: -1}, test_int32{fn: xor_int32_Neg1, fnname: "xor_int32_Neg1", in: 0, want: -1}, test_int32{fn: xor_Neg1_int32, fnname: "xor_Neg1_int32", in: 1, want: -2}, test_int32{fn: xor_int32_Neg1, fnname: "xor_int32_Neg1", in: 1, want: -2}, test_int32{fn: xor_Neg1_int32, fnname: "xor_Neg1_int32", in: 2147483647, want: -2147483648}, test_int32{fn: xor_int32_Neg1, fnname: "xor_int32_Neg1", in: 2147483647, want: -2147483648}, test_int32{fn: xor_0_int32, fnname: "xor_0_int32", in: -2147483648, want: -2147483648}, test_int32{fn: xor_int32_0, fnname: "xor_int32_0", in: -2147483648, want: -2147483648}, test_int32{fn: xor_0_int32, fnname: "xor_0_int32", in: -2147483647, want: -2147483647}, test_int32{fn: xor_int32_0, fnname: "xor_int32_0", in: -2147483647, want: -2147483647}, test_int32{fn: xor_0_int32, fnname: "xor_0_int32", in: -1, want: -1}, test_int32{fn: xor_int32_0, fnname: "xor_int32_0", in: -1, want: -1}, test_int32{fn: xor_0_int32, fnname: "xor_0_int32", in: 0, want: 0}, test_int32{fn: xor_int32_0, fnname: "xor_int32_0", in: 0, want: 0}, test_int32{fn: xor_0_int32, fnname: "xor_0_int32", in: 1, want: 1}, test_int32{fn: xor_int32_0, fnname: "xor_int32_0", in: 1, want: 1}, test_int32{fn: xor_0_int32, fnname: "xor_0_int32", in: 2147483647, want: 2147483647}, test_int32{fn: xor_int32_0, fnname: "xor_int32_0", in: 2147483647, want: 2147483647}, test_int32{fn: xor_1_int32, fnname: "xor_1_int32", in: -2147483648, want: -2147483647}, test_int32{fn: xor_int32_1, fnname: "xor_int32_1", in: -2147483648, want: -2147483647}, test_int32{fn: xor_1_int32, fnname: "xor_1_int32", in: -2147483647, want: -2147483648}, test_int32{fn: xor_int32_1, fnname: "xor_int32_1", in: -2147483647, want: -2147483648}, test_int32{fn: xor_1_int32, fnname: "xor_1_int32", in: -1, want: -2}, test_int32{fn: xor_int32_1, fnname: "xor_int32_1", in: -1, want: -2}, test_int32{fn: xor_1_int32, fnname: "xor_1_int32", in: 0, want: 1}, test_int32{fn: xor_int32_1, fnname: "xor_int32_1", in: 0, want: 1}, test_int32{fn: xor_1_int32, fnname: "xor_1_int32", in: 1, want: 0}, test_int32{fn: xor_int32_1, fnname: "xor_int32_1", in: 1, want: 0}, test_int32{fn: xor_1_int32, fnname: "xor_1_int32", in: 2147483647, want: 2147483646}, test_int32{fn: xor_int32_1, fnname: "xor_int32_1", in: 2147483647, want: 2147483646}, test_int32{fn: xor_2147483647_int32, fnname: "xor_2147483647_int32", in: -2147483648, want: -1}, test_int32{fn: xor_int32_2147483647, fnname: "xor_int32_2147483647", in: -2147483648, want: -1}, test_int32{fn: xor_2147483647_int32, fnname: "xor_2147483647_int32", in: -2147483647, want: -2}, test_int32{fn: xor_int32_2147483647, fnname: "xor_int32_2147483647", in: -2147483647, want: -2}, test_int32{fn: xor_2147483647_int32, fnname: "xor_2147483647_int32", in: -1, want: -2147483648}, test_int32{fn: xor_int32_2147483647, fnname: "xor_int32_2147483647", in: -1, want: -2147483648}, test_int32{fn: xor_2147483647_int32, fnname: "xor_2147483647_int32", in: 0, want: 2147483647}, test_int32{fn: xor_int32_2147483647, fnname: "xor_int32_2147483647", in: 0, want: 2147483647}, test_int32{fn: xor_2147483647_int32, fnname: "xor_2147483647_int32", in: 1, want: 2147483646}, test_int32{fn: xor_int32_2147483647, fnname: "xor_int32_2147483647", in: 1, want: 2147483646}, test_int32{fn: xor_2147483647_int32, fnname: "xor_2147483647_int32", in: 2147483647, want: 0}, test_int32{fn: xor_int32_2147483647, fnname: "xor_int32_2147483647", in: 2147483647, want: 0}} type test_int32mul struct { fn func(int32) int32 fnname string in int32 want int32 } var tests_int32mul = []test_int32{ test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: -9, want: 81}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: -9, want: 81}, test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: -5, want: 45}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: -5, want: 45}, test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: -3, want: 27}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: -3, want: 27}, test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 3, want: -27}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 3, want: -27}, test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 5, want: -45}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 5, want: -45}, test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 7, want: -63}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 7, want: -63}, test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 9, want: -81}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 9, want: -81}, test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 10, want: -90}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 10, want: -90}, test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 11, want: -99}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 11, want: -99}, test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 13, want: -117}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 13, want: -117}, test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 19, want: -171}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 19, want: -171}, test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 21, want: -189}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 21, want: -189}, test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 25, want: -225}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 25, want: -225}, test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 27, want: -243}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 27, want: -243}, test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 37, want: -333}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 37, want: -333}, test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 41, want: -369}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 41, want: -369}, test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 45, want: -405}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 45, want: -405}, test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 73, want: -657}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 73, want: -657}, test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 81, want: -729}, test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 81, want: -729}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: -9, want: 45}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: -9, want: 45}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: -5, want: 25}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: -5, want: 25}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: -3, want: 15}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: -3, want: 15}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 3, want: -15}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 3, want: -15}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 5, want: -25}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 5, want: -25}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 7, want: -35}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 7, want: -35}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 9, want: -45}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 9, want: -45}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 10, want: -50}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 10, want: -50}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 11, want: -55}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 11, want: -55}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 13, want: -65}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 13, want: -65}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 19, want: -95}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 19, want: -95}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 21, want: -105}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 21, want: -105}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 25, want: -125}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 25, want: -125}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 27, want: -135}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 27, want: -135}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 37, want: -185}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 37, want: -185}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 41, want: -205}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 41, want: -205}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 45, want: -225}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 45, want: -225}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 73, want: -365}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 73, want: -365}, test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 81, want: -405}, test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 81, want: -405}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: -9, want: 27}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: -9, want: 27}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: -5, want: 15}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: -5, want: 15}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: -3, want: 9}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: -3, want: 9}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 3, want: -9}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 3, want: -9}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 5, want: -15}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 5, want: -15}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 7, want: -21}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 7, want: -21}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 9, want: -27}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 9, want: -27}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 10, want: -30}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 10, want: -30}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 11, want: -33}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 11, want: -33}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 13, want: -39}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 13, want: -39}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 19, want: -57}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 19, want: -57}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 21, want: -63}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 21, want: -63}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 25, want: -75}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 25, want: -75}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 27, want: -81}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 27, want: -81}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 37, want: -111}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 37, want: -111}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 41, want: -123}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 41, want: -123}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 45, want: -135}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 45, want: -135}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 73, want: -219}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 73, want: -219}, test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 81, want: -243}, test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 81, want: -243}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: -9, want: -27}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: -9, want: -27}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: -5, want: -15}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: -5, want: -15}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: -3, want: -9}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: -3, want: -9}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 3, want: 9}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 3, want: 9}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 5, want: 15}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 5, want: 15}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 7, want: 21}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 7, want: 21}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 9, want: 27}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 9, want: 27}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 10, want: 30}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 10, want: 30}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 11, want: 33}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 11, want: 33}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 13, want: 39}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 13, want: 39}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 19, want: 57}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 19, want: 57}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 21, want: 63}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 21, want: 63}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 25, want: 75}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 25, want: 75}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 27, want: 81}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 27, want: 81}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 37, want: 111}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 37, want: 111}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 41, want: 123}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 41, want: 123}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 45, want: 135}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 45, want: 135}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 73, want: 219}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 73, want: 219}, test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 81, want: 243}, test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 81, want: 243}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: -9, want: -45}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: -9, want: -45}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: -5, want: -25}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: -5, want: -25}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: -3, want: -15}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: -3, want: -15}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 3, want: 15}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 3, want: 15}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 5, want: 25}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 5, want: 25}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 7, want: 35}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 7, want: 35}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 9, want: 45}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 9, want: 45}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 10, want: 50}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 10, want: 50}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 11, want: 55}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 11, want: 55}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 13, want: 65}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 13, want: 65}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 19, want: 95}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 19, want: 95}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 21, want: 105}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 21, want: 105}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 25, want: 125}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 25, want: 125}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 27, want: 135}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 27, want: 135}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 37, want: 185}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 37, want: 185}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 41, want: 205}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 41, want: 205}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 45, want: 225}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 45, want: 225}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 73, want: 365}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 73, want: 365}, test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 81, want: 405}, test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 81, want: 405}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: -9, want: -63}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: -9, want: -63}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: -5, want: -35}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: -5, want: -35}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: -3, want: -21}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: -3, want: -21}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 3, want: 21}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 3, want: 21}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 5, want: 35}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 5, want: 35}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 7, want: 49}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 7, want: 49}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 9, want: 63}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 9, want: 63}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 10, want: 70}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 10, want: 70}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 11, want: 77}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 11, want: 77}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 13, want: 91}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 13, want: 91}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 19, want: 133}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 19, want: 133}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 21, want: 147}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 21, want: 147}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 25, want: 175}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 25, want: 175}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 27, want: 189}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 27, want: 189}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 37, want: 259}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 37, want: 259}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 41, want: 287}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 41, want: 287}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 45, want: 315}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 45, want: 315}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 73, want: 511}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 73, want: 511}, test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 81, want: 567}, test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 81, want: 567}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: -9, want: -81}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: -9, want: -81}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: -5, want: -45}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: -5, want: -45}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: -3, want: -27}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: -3, want: -27}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 3, want: 27}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 3, want: 27}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 5, want: 45}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 5, want: 45}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 7, want: 63}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 7, want: 63}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 9, want: 81}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 9, want: 81}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 10, want: 90}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 10, want: 90}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 11, want: 99}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 11, want: 99}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 13, want: 117}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 13, want: 117}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 19, want: 171}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 19, want: 171}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 21, want: 189}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 21, want: 189}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 25, want: 225}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 25, want: 225}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 27, want: 243}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 27, want: 243}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 37, want: 333}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 37, want: 333}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 41, want: 369}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 41, want: 369}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 45, want: 405}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 45, want: 405}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 73, want: 657}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 73, want: 657}, test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 81, want: 729}, test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 81, want: 729}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: -9, want: -90}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: -9, want: -90}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: -5, want: -50}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: -5, want: -50}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: -3, want: -30}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: -3, want: -30}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 3, want: 30}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 3, want: 30}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 5, want: 50}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 5, want: 50}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 7, want: 70}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 7, want: 70}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 9, want: 90}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 9, want: 90}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 10, want: 100}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 10, want: 100}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 11, want: 110}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 11, want: 110}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 13, want: 130}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 13, want: 130}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 19, want: 190}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 19, want: 190}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 21, want: 210}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 21, want: 210}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 25, want: 250}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 25, want: 250}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 27, want: 270}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 27, want: 270}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 37, want: 370}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 37, want: 370}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 41, want: 410}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 41, want: 410}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 45, want: 450}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 45, want: 450}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 73, want: 730}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 73, want: 730}, test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 81, want: 810}, test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 81, want: 810}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: -9, want: -99}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: -9, want: -99}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: -5, want: -55}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: -5, want: -55}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: -3, want: -33}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: -3, want: -33}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 3, want: 33}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 3, want: 33}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 5, want: 55}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 5, want: 55}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 7, want: 77}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 7, want: 77}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 9, want: 99}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 9, want: 99}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 10, want: 110}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 10, want: 110}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 11, want: 121}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 11, want: 121}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 13, want: 143}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 13, want: 143}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 19, want: 209}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 19, want: 209}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 21, want: 231}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 21, want: 231}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 25, want: 275}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 25, want: 275}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 27, want: 297}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 27, want: 297}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 37, want: 407}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 37, want: 407}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 41, want: 451}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 41, want: 451}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 45, want: 495}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 45, want: 495}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 73, want: 803}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 73, want: 803}, test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 81, want: 891}, test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 81, want: 891}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: -9, want: -117}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: -9, want: -117}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: -5, want: -65}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: -5, want: -65}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: -3, want: -39}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: -3, want: -39}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 3, want: 39}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 3, want: 39}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 5, want: 65}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 5, want: 65}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 7, want: 91}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 7, want: 91}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 9, want: 117}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 9, want: 117}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 10, want: 130}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 10, want: 130}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 11, want: 143}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 11, want: 143}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 13, want: 169}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 13, want: 169}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 19, want: 247}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 19, want: 247}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 21, want: 273}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 21, want: 273}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 25, want: 325}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 25, want: 325}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 27, want: 351}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 27, want: 351}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 37, want: 481}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 37, want: 481}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 41, want: 533}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 41, want: 533}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 45, want: 585}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 45, want: 585}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 73, want: 949}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 73, want: 949}, test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 81, want: 1053}, test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 81, want: 1053}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: -9, want: -171}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: -9, want: -171}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: -5, want: -95}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: -5, want: -95}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: -3, want: -57}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: -3, want: -57}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 3, want: 57}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 3, want: 57}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 5, want: 95}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 5, want: 95}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 7, want: 133}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 7, want: 133}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 9, want: 171}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 9, want: 171}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 10, want: 190}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 10, want: 190}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 11, want: 209}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 11, want: 209}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 13, want: 247}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 13, want: 247}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 19, want: 361}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 19, want: 361}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 21, want: 399}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 21, want: 399}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 25, want: 475}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 25, want: 475}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 27, want: 513}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 27, want: 513}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 37, want: 703}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 37, want: 703}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 41, want: 779}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 41, want: 779}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 45, want: 855}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 45, want: 855}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 73, want: 1387}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 73, want: 1387}, test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 81, want: 1539}, test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 81, want: 1539}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: -9, want: -189}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: -9, want: -189}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: -5, want: -105}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: -5, want: -105}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: -3, want: -63}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: -3, want: -63}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 3, want: 63}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 3, want: 63}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 5, want: 105}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 5, want: 105}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 7, want: 147}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 7, want: 147}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 9, want: 189}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 9, want: 189}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 10, want: 210}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 10, want: 210}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 11, want: 231}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 11, want: 231}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 13, want: 273}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 13, want: 273}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 19, want: 399}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 19, want: 399}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 21, want: 441}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 21, want: 441}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 25, want: 525}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 25, want: 525}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 27, want: 567}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 27, want: 567}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 37, want: 777}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 37, want: 777}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 41, want: 861}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 41, want: 861}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 45, want: 945}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 45, want: 945}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 73, want: 1533}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 73, want: 1533}, test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 81, want: 1701}, test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 81, want: 1701}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: -9, want: -225}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: -9, want: -225}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: -5, want: -125}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: -5, want: -125}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: -3, want: -75}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: -3, want: -75}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 3, want: 75}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 3, want: 75}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 5, want: 125}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 5, want: 125}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 7, want: 175}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 7, want: 175}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 9, want: 225}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 9, want: 225}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 10, want: 250}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 10, want: 250}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 11, want: 275}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 11, want: 275}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 13, want: 325}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 13, want: 325}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 19, want: 475}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 19, want: 475}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 21, want: 525}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 21, want: 525}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 25, want: 625}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 25, want: 625}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 27, want: 675}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 27, want: 675}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 37, want: 925}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 37, want: 925}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 41, want: 1025}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 41, want: 1025}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 45, want: 1125}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 45, want: 1125}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 73, want: 1825}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 73, want: 1825}, test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 81, want: 2025}, test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 81, want: 2025}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: -9, want: -243}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: -9, want: -243}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: -5, want: -135}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: -5, want: -135}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: -3, want: -81}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: -3, want: -81}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 3, want: 81}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 3, want: 81}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 5, want: 135}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 5, want: 135}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 7, want: 189}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 7, want: 189}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 9, want: 243}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 9, want: 243}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 10, want: 270}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 10, want: 270}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 11, want: 297}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 11, want: 297}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 13, want: 351}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 13, want: 351}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 19, want: 513}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 19, want: 513}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 21, want: 567}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 21, want: 567}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 25, want: 675}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 25, want: 675}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 27, want: 729}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 27, want: 729}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 37, want: 999}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 37, want: 999}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 41, want: 1107}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 41, want: 1107}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 45, want: 1215}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 45, want: 1215}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 73, want: 1971}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 73, want: 1971}, test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 81, want: 2187}, test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 81, want: 2187}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: -9, want: -333}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: -9, want: -333}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: -5, want: -185}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: -5, want: -185}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: -3, want: -111}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: -3, want: -111}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 3, want: 111}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 3, want: 111}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 5, want: 185}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 5, want: 185}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 7, want: 259}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 7, want: 259}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 9, want: 333}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 9, want: 333}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 10, want: 370}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 10, want: 370}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 11, want: 407}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 11, want: 407}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 13, want: 481}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 13, want: 481}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 19, want: 703}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 19, want: 703}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 21, want: 777}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 21, want: 777}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 25, want: 925}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 25, want: 925}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 27, want: 999}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 27, want: 999}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 37, want: 1369}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 37, want: 1369}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 41, want: 1517}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 41, want: 1517}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 45, want: 1665}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 45, want: 1665}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 73, want: 2701}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 73, want: 2701}, test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 81, want: 2997}, test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 81, want: 2997}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: -9, want: -369}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: -9, want: -369}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: -5, want: -205}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: -5, want: -205}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: -3, want: -123}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: -3, want: -123}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 3, want: 123}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 3, want: 123}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 5, want: 205}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 5, want: 205}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 7, want: 287}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 7, want: 287}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 9, want: 369}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 9, want: 369}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 10, want: 410}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 10, want: 410}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 11, want: 451}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 11, want: 451}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 13, want: 533}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 13, want: 533}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 19, want: 779}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 19, want: 779}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 21, want: 861}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 21, want: 861}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 25, want: 1025}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 25, want: 1025}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 27, want: 1107}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 27, want: 1107}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 37, want: 1517}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 37, want: 1517}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 41, want: 1681}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 41, want: 1681}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 45, want: 1845}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 45, want: 1845}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 73, want: 2993}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 73, want: 2993}, test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 81, want: 3321}, test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 81, want: 3321}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: -9, want: -405}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: -9, want: -405}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: -5, want: -225}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: -5, want: -225}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: -3, want: -135}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: -3, want: -135}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 3, want: 135}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 3, want: 135}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 5, want: 225}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 5, want: 225}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 7, want: 315}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 7, want: 315}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 9, want: 405}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 9, want: 405}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 10, want: 450}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 10, want: 450}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 11, want: 495}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 11, want: 495}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 13, want: 585}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 13, want: 585}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 19, want: 855}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 19, want: 855}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 21, want: 945}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 21, want: 945}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 25, want: 1125}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 25, want: 1125}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 27, want: 1215}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 27, want: 1215}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 37, want: 1665}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 37, want: 1665}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 41, want: 1845}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 41, want: 1845}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 45, want: 2025}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 45, want: 2025}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 73, want: 3285}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 73, want: 3285}, test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 81, want: 3645}, test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 81, want: 3645}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: -9, want: -657}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: -9, want: -657}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: -5, want: -365}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: -5, want: -365}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: -3, want: -219}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: -3, want: -219}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 3, want: 219}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 3, want: 219}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 5, want: 365}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 5, want: 365}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 7, want: 511}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 7, want: 511}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 9, want: 657}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 9, want: 657}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 10, want: 730}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 10, want: 730}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 11, want: 803}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 11, want: 803}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 13, want: 949}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 13, want: 949}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 19, want: 1387}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 19, want: 1387}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 21, want: 1533}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 21, want: 1533}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 25, want: 1825}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 25, want: 1825}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 27, want: 1971}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 27, want: 1971}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 37, want: 2701}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 37, want: 2701}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 41, want: 2993}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 41, want: 2993}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 45, want: 3285}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 45, want: 3285}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 73, want: 5329}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 73, want: 5329}, test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 81, want: 5913}, test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 81, want: 5913}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: -9, want: -729}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: -9, want: -729}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: -5, want: -405}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: -5, want: -405}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: -3, want: -243}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: -3, want: -243}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 3, want: 243}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 3, want: 243}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 5, want: 405}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 5, want: 405}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 7, want: 567}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 7, want: 567}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 9, want: 729}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 9, want: 729}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 10, want: 810}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 10, want: 810}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 11, want: 891}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 11, want: 891}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 13, want: 1053}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 13, want: 1053}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 19, want: 1539}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 19, want: 1539}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 21, want: 1701}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 21, want: 1701}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 25, want: 2025}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 25, want: 2025}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 27, want: 2187}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 27, want: 2187}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 37, want: 2997}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 37, want: 2997}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 41, want: 3321}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 41, want: 3321}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 45, want: 3645}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 45, want: 3645}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 73, want: 5913}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 73, want: 5913}, test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 81, want: 6561}, test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 81, want: 6561}} type test_uint16 struct { fn func(uint16) uint16 fnname string in uint16 want uint16 } var tests_uint16 = []test_uint16{ test_uint16{fn: add_0_uint16, fnname: "add_0_uint16", in: 0, want: 0}, test_uint16{fn: add_uint16_0, fnname: "add_uint16_0", in: 0, want: 0}, test_uint16{fn: add_0_uint16, fnname: "add_0_uint16", in: 1, want: 1}, test_uint16{fn: add_uint16_0, fnname: "add_uint16_0", in: 1, want: 1}, test_uint16{fn: add_0_uint16, fnname: "add_0_uint16", in: 65535, want: 65535}, test_uint16{fn: add_uint16_0, fnname: "add_uint16_0", in: 65535, want: 65535}, test_uint16{fn: add_1_uint16, fnname: "add_1_uint16", in: 0, want: 1}, test_uint16{fn: add_uint16_1, fnname: "add_uint16_1", in: 0, want: 1}, test_uint16{fn: add_1_uint16, fnname: "add_1_uint16", in: 1, want: 2}, test_uint16{fn: add_uint16_1, fnname: "add_uint16_1", in: 1, want: 2}, test_uint16{fn: add_1_uint16, fnname: "add_1_uint16", in: 65535, want: 0}, test_uint16{fn: add_uint16_1, fnname: "add_uint16_1", in: 65535, want: 0}, test_uint16{fn: add_65535_uint16, fnname: "add_65535_uint16", in: 0, want: 65535}, test_uint16{fn: add_uint16_65535, fnname: "add_uint16_65535", in: 0, want: 65535}, test_uint16{fn: add_65535_uint16, fnname: "add_65535_uint16", in: 1, want: 0}, test_uint16{fn: add_uint16_65535, fnname: "add_uint16_65535", in: 1, want: 0}, test_uint16{fn: add_65535_uint16, fnname: "add_65535_uint16", in: 65535, want: 65534}, test_uint16{fn: add_uint16_65535, fnname: "add_uint16_65535", in: 65535, want: 65534}, test_uint16{fn: sub_0_uint16, fnname: "sub_0_uint16", in: 0, want: 0}, test_uint16{fn: sub_uint16_0, fnname: "sub_uint16_0", in: 0, want: 0}, test_uint16{fn: sub_0_uint16, fnname: "sub_0_uint16", in: 1, want: 65535}, test_uint16{fn: sub_uint16_0, fnname: "sub_uint16_0", in: 1, want: 1}, test_uint16{fn: sub_0_uint16, fnname: "sub_0_uint16", in: 65535, want: 1}, test_uint16{fn: sub_uint16_0, fnname: "sub_uint16_0", in: 65535, want: 65535}, test_uint16{fn: sub_1_uint16, fnname: "sub_1_uint16", in: 0, want: 1}, test_uint16{fn: sub_uint16_1, fnname: "sub_uint16_1", in: 0, want: 65535}, test_uint16{fn: sub_1_uint16, fnname: "sub_1_uint16", in: 1, want: 0}, test_uint16{fn: sub_uint16_1, fnname: "sub_uint16_1", in: 1, want: 0}, test_uint16{fn: sub_1_uint16, fnname: "sub_1_uint16", in: 65535, want: 2}, test_uint16{fn: sub_uint16_1, fnname: "sub_uint16_1", in: 65535, want: 65534}, test_uint16{fn: sub_65535_uint16, fnname: "sub_65535_uint16", in: 0, want: 65535}, test_uint16{fn: sub_uint16_65535, fnname: "sub_uint16_65535", in: 0, want: 1}, test_uint16{fn: sub_65535_uint16, fnname: "sub_65535_uint16", in: 1, want: 65534}, test_uint16{fn: sub_uint16_65535, fnname: "sub_uint16_65535", in: 1, want: 2}, test_uint16{fn: sub_65535_uint16, fnname: "sub_65535_uint16", in: 65535, want: 0}, test_uint16{fn: sub_uint16_65535, fnname: "sub_uint16_65535", in: 65535, want: 0}, test_uint16{fn: div_0_uint16, fnname: "div_0_uint16", in: 1, want: 0}, test_uint16{fn: div_0_uint16, fnname: "div_0_uint16", in: 65535, want: 0}, test_uint16{fn: div_uint16_1, fnname: "div_uint16_1", in: 0, want: 0}, test_uint16{fn: div_1_uint16, fnname: "div_1_uint16", in: 1, want: 1}, test_uint16{fn: div_uint16_1, fnname: "div_uint16_1", in: 1, want: 1}, test_uint16{fn: div_1_uint16, fnname: "div_1_uint16", in: 65535, want: 0}, test_uint16{fn: div_uint16_1, fnname: "div_uint16_1", in: 65535, want: 65535}, test_uint16{fn: div_uint16_65535, fnname: "div_uint16_65535", in: 0, want: 0}, test_uint16{fn: div_65535_uint16, fnname: "div_65535_uint16", in: 1, want: 65535}, test_uint16{fn: div_uint16_65535, fnname: "div_uint16_65535", in: 1, want: 0}, test_uint16{fn: div_65535_uint16, fnname: "div_65535_uint16", in: 65535, want: 1}, test_uint16{fn: div_uint16_65535, fnname: "div_uint16_65535", in: 65535, want: 1}, test_uint16{fn: mul_0_uint16, fnname: "mul_0_uint16", in: 0, want: 0}, test_uint16{fn: mul_uint16_0, fnname: "mul_uint16_0", in: 0, want: 0}, test_uint16{fn: mul_0_uint16, fnname: "mul_0_uint16", in: 1, want: 0}, test_uint16{fn: mul_uint16_0, fnname: "mul_uint16_0", in: 1, want: 0}, test_uint16{fn: mul_0_uint16, fnname: "mul_0_uint16", in: 65535, want: 0}, test_uint16{fn: mul_uint16_0, fnname: "mul_uint16_0", in: 65535, want: 0}, test_uint16{fn: mul_1_uint16, fnname: "mul_1_uint16", in: 0, want: 0}, test_uint16{fn: mul_uint16_1, fnname: "mul_uint16_1", in: 0, want: 0}, test_uint16{fn: mul_1_uint16, fnname: "mul_1_uint16", in: 1, want: 1}, test_uint16{fn: mul_uint16_1, fnname: "mul_uint16_1", in: 1, want: 1}, test_uint16{fn: mul_1_uint16, fnname: "mul_1_uint16", in: 65535, want: 65535}, test_uint16{fn: mul_uint16_1, fnname: "mul_uint16_1", in: 65535, want: 65535}, test_uint16{fn: mul_65535_uint16, fnname: "mul_65535_uint16", in: 0, want: 0}, test_uint16{fn: mul_uint16_65535, fnname: "mul_uint16_65535", in: 0, want: 0}, test_uint16{fn: mul_65535_uint16, fnname: "mul_65535_uint16", in: 1, want: 65535}, test_uint16{fn: mul_uint16_65535, fnname: "mul_uint16_65535", in: 1, want: 65535}, test_uint16{fn: mul_65535_uint16, fnname: "mul_65535_uint16", in: 65535, want: 1}, test_uint16{fn: mul_uint16_65535, fnname: "mul_uint16_65535", in: 65535, want: 1}, test_uint16{fn: lsh_0_uint16, fnname: "lsh_0_uint16", in: 0, want: 0}, test_uint16{fn: lsh_uint16_0, fnname: "lsh_uint16_0", in: 0, want: 0}, test_uint16{fn: lsh_0_uint16, fnname: "lsh_0_uint16", in: 1, want: 0}, test_uint16{fn: lsh_uint16_0, fnname: "lsh_uint16_0", in: 1, want: 1}, test_uint16{fn: lsh_0_uint16, fnname: "lsh_0_uint16", in: 65535, want: 0}, test_uint16{fn: lsh_uint16_0, fnname: "lsh_uint16_0", in: 65535, want: 65535}, test_uint16{fn: lsh_1_uint16, fnname: "lsh_1_uint16", in: 0, want: 1}, test_uint16{fn: lsh_uint16_1, fnname: "lsh_uint16_1", in: 0, want: 0}, test_uint16{fn: lsh_1_uint16, fnname: "lsh_1_uint16", in: 1, want: 2}, test_uint16{fn: lsh_uint16_1, fnname: "lsh_uint16_1", in: 1, want: 2}, test_uint16{fn: lsh_1_uint16, fnname: "lsh_1_uint16", in: 65535, want: 0}, test_uint16{fn: lsh_uint16_1, fnname: "lsh_uint16_1", in: 65535, want: 65534}, test_uint16{fn: lsh_65535_uint16, fnname: "lsh_65535_uint16", in: 0, want: 65535}, test_uint16{fn: lsh_uint16_65535, fnname: "lsh_uint16_65535", in: 0, want: 0}, test_uint16{fn: lsh_65535_uint16, fnname: "lsh_65535_uint16", in: 1, want: 65534}, test_uint16{fn: lsh_uint16_65535, fnname: "lsh_uint16_65535", in: 1, want: 0}, test_uint16{fn: lsh_65535_uint16, fnname: "lsh_65535_uint16", in: 65535, want: 0}, test_uint16{fn: lsh_uint16_65535, fnname: "lsh_uint16_65535", in: 65535, want: 0}, test_uint16{fn: rsh_0_uint16, fnname: "rsh_0_uint16", in: 0, want: 0}, test_uint16{fn: rsh_uint16_0, fnname: "rsh_uint16_0", in: 0, want: 0}, test_uint16{fn: rsh_0_uint16, fnname: "rsh_0_uint16", in: 1, want: 0}, test_uint16{fn: rsh_uint16_0, fnname: "rsh_uint16_0", in: 1, want: 1}, test_uint16{fn: rsh_0_uint16, fnname: "rsh_0_uint16", in: 65535, want: 0}, test_uint16{fn: rsh_uint16_0, fnname: "rsh_uint16_0", in: 65535, want: 65535}, test_uint16{fn: rsh_1_uint16, fnname: "rsh_1_uint16", in: 0, want: 1}, test_uint16{fn: rsh_uint16_1, fnname: "rsh_uint16_1", in: 0, want: 0}, test_uint16{fn: rsh_1_uint16, fnname: "rsh_1_uint16", in: 1, want: 0}, test_uint16{fn: rsh_uint16_1, fnname: "rsh_uint16_1", in: 1, want: 0}, test_uint16{fn: rsh_1_uint16, fnname: "rsh_1_uint16", in: 65535, want: 0}, test_uint16{fn: rsh_uint16_1, fnname: "rsh_uint16_1", in: 65535, want: 32767}, test_uint16{fn: rsh_65535_uint16, fnname: "rsh_65535_uint16", in: 0, want: 65535}, test_uint16{fn: rsh_uint16_65535, fnname: "rsh_uint16_65535", in: 0, want: 0}, test_uint16{fn: rsh_65535_uint16, fnname: "rsh_65535_uint16", in: 1, want: 32767}, test_uint16{fn: rsh_uint16_65535, fnname: "rsh_uint16_65535", in: 1, want: 0}, test_uint16{fn: rsh_65535_uint16, fnname: "rsh_65535_uint16", in: 65535, want: 0}, test_uint16{fn: rsh_uint16_65535, fnname: "rsh_uint16_65535", in: 65535, want: 0}, test_uint16{fn: mod_0_uint16, fnname: "mod_0_uint16", in: 1, want: 0}, test_uint16{fn: mod_0_uint16, fnname: "mod_0_uint16", in: 65535, want: 0}, test_uint16{fn: mod_uint16_1, fnname: "mod_uint16_1", in: 0, want: 0}, test_uint16{fn: mod_1_uint16, fnname: "mod_1_uint16", in: 1, want: 0}, test_uint16{fn: mod_uint16_1, fnname: "mod_uint16_1", in: 1, want: 0}, test_uint16{fn: mod_1_uint16, fnname: "mod_1_uint16", in: 65535, want: 1}, test_uint16{fn: mod_uint16_1, fnname: "mod_uint16_1", in: 65535, want: 0}, test_uint16{fn: mod_uint16_65535, fnname: "mod_uint16_65535", in: 0, want: 0}, test_uint16{fn: mod_65535_uint16, fnname: "mod_65535_uint16", in: 1, want: 0}, test_uint16{fn: mod_uint16_65535, fnname: "mod_uint16_65535", in: 1, want: 1}, test_uint16{fn: mod_65535_uint16, fnname: "mod_65535_uint16", in: 65535, want: 0}, test_uint16{fn: mod_uint16_65535, fnname: "mod_uint16_65535", in: 65535, want: 0}, test_uint16{fn: and_0_uint16, fnname: "and_0_uint16", in: 0, want: 0}, test_uint16{fn: and_uint16_0, fnname: "and_uint16_0", in: 0, want: 0}, test_uint16{fn: and_0_uint16, fnname: "and_0_uint16", in: 1, want: 0}, test_uint16{fn: and_uint16_0, fnname: "and_uint16_0", in: 1, want: 0}, test_uint16{fn: and_0_uint16, fnname: "and_0_uint16", in: 65535, want: 0}, test_uint16{fn: and_uint16_0, fnname: "and_uint16_0", in: 65535, want: 0}, test_uint16{fn: and_1_uint16, fnname: "and_1_uint16", in: 0, want: 0}, test_uint16{fn: and_uint16_1, fnname: "and_uint16_1", in: 0, want: 0}, test_uint16{fn: and_1_uint16, fnname: "and_1_uint16", in: 1, want: 1}, test_uint16{fn: and_uint16_1, fnname: "and_uint16_1", in: 1, want: 1}, test_uint16{fn: and_1_uint16, fnname: "and_1_uint16", in: 65535, want: 1}, test_uint16{fn: and_uint16_1, fnname: "and_uint16_1", in: 65535, want: 1}, test_uint16{fn: and_65535_uint16, fnname: "and_65535_uint16", in: 0, want: 0}, test_uint16{fn: and_uint16_65535, fnname: "and_uint16_65535", in: 0, want: 0}, test_uint16{fn: and_65535_uint16, fnname: "and_65535_uint16", in: 1, want: 1}, test_uint16{fn: and_uint16_65535, fnname: "and_uint16_65535", in: 1, want: 1}, test_uint16{fn: and_65535_uint16, fnname: "and_65535_uint16", in: 65535, want: 65535}, test_uint16{fn: and_uint16_65535, fnname: "and_uint16_65535", in: 65535, want: 65535}, test_uint16{fn: or_0_uint16, fnname: "or_0_uint16", in: 0, want: 0}, test_uint16{fn: or_uint16_0, fnname: "or_uint16_0", in: 0, want: 0}, test_uint16{fn: or_0_uint16, fnname: "or_0_uint16", in: 1, want: 1}, test_uint16{fn: or_uint16_0, fnname: "or_uint16_0", in: 1, want: 1}, test_uint16{fn: or_0_uint16, fnname: "or_0_uint16", in: 65535, want: 65535}, test_uint16{fn: or_uint16_0, fnname: "or_uint16_0", in: 65535, want: 65535}, test_uint16{fn: or_1_uint16, fnname: "or_1_uint16", in: 0, want: 1}, test_uint16{fn: or_uint16_1, fnname: "or_uint16_1", in: 0, want: 1}, test_uint16{fn: or_1_uint16, fnname: "or_1_uint16", in: 1, want: 1}, test_uint16{fn: or_uint16_1, fnname: "or_uint16_1", in: 1, want: 1}, test_uint16{fn: or_1_uint16, fnname: "or_1_uint16", in: 65535, want: 65535}, test_uint16{fn: or_uint16_1, fnname: "or_uint16_1", in: 65535, want: 65535}, test_uint16{fn: or_65535_uint16, fnname: "or_65535_uint16", in: 0, want: 65535}, test_uint16{fn: or_uint16_65535, fnname: "or_uint16_65535", in: 0, want: 65535}, test_uint16{fn: or_65535_uint16, fnname: "or_65535_uint16", in: 1, want: 65535}, test_uint16{fn: or_uint16_65535, fnname: "or_uint16_65535", in: 1, want: 65535}, test_uint16{fn: or_65535_uint16, fnname: "or_65535_uint16", in: 65535, want: 65535}, test_uint16{fn: or_uint16_65535, fnname: "or_uint16_65535", in: 65535, want: 65535}, test_uint16{fn: xor_0_uint16, fnname: "xor_0_uint16", in: 0, want: 0}, test_uint16{fn: xor_uint16_0, fnname: "xor_uint16_0", in: 0, want: 0}, test_uint16{fn: xor_0_uint16, fnname: "xor_0_uint16", in: 1, want: 1}, test_uint16{fn: xor_uint16_0, fnname: "xor_uint16_0", in: 1, want: 1}, test_uint16{fn: xor_0_uint16, fnname: "xor_0_uint16", in: 65535, want: 65535}, test_uint16{fn: xor_uint16_0, fnname: "xor_uint16_0", in: 65535, want: 65535}, test_uint16{fn: xor_1_uint16, fnname: "xor_1_uint16", in: 0, want: 1}, test_uint16{fn: xor_uint16_1, fnname: "xor_uint16_1", in: 0, want: 1}, test_uint16{fn: xor_1_uint16, fnname: "xor_1_uint16", in: 1, want: 0}, test_uint16{fn: xor_uint16_1, fnname: "xor_uint16_1", in: 1, want: 0}, test_uint16{fn: xor_1_uint16, fnname: "xor_1_uint16", in: 65535, want: 65534}, test_uint16{fn: xor_uint16_1, fnname: "xor_uint16_1", in: 65535, want: 65534}, test_uint16{fn: xor_65535_uint16, fnname: "xor_65535_uint16", in: 0, want: 65535}, test_uint16{fn: xor_uint16_65535, fnname: "xor_uint16_65535", in: 0, want: 65535}, test_uint16{fn: xor_65535_uint16, fnname: "xor_65535_uint16", in: 1, want: 65534}, test_uint16{fn: xor_uint16_65535, fnname: "xor_uint16_65535", in: 1, want: 65534}, test_uint16{fn: xor_65535_uint16, fnname: "xor_65535_uint16", in: 65535, want: 0}, test_uint16{fn: xor_uint16_65535, fnname: "xor_uint16_65535", in: 65535, want: 0}} type test_int16 struct { fn func(int16) int16 fnname string in int16 want int16 } var tests_int16 = []test_int16{ test_int16{fn: add_Neg32768_int16, fnname: "add_Neg32768_int16", in: -32768, want: 0}, test_int16{fn: add_int16_Neg32768, fnname: "add_int16_Neg32768", in: -32768, want: 0}, test_int16{fn: add_Neg32768_int16, fnname: "add_Neg32768_int16", in: -32767, want: 1}, test_int16{fn: add_int16_Neg32768, fnname: "add_int16_Neg32768", in: -32767, want: 1}, test_int16{fn: add_Neg32768_int16, fnname: "add_Neg32768_int16", in: -1, want: 32767}, test_int16{fn: add_int16_Neg32768, fnname: "add_int16_Neg32768", in: -1, want: 32767}, test_int16{fn: add_Neg32768_int16, fnname: "add_Neg32768_int16", in: 0, want: -32768}, test_int16{fn: add_int16_Neg32768, fnname: "add_int16_Neg32768", in: 0, want: -32768}, test_int16{fn: add_Neg32768_int16, fnname: "add_Neg32768_int16", in: 1, want: -32767}, test_int16{fn: add_int16_Neg32768, fnname: "add_int16_Neg32768", in: 1, want: -32767}, test_int16{fn: add_Neg32768_int16, fnname: "add_Neg32768_int16", in: 32766, want: -2}, test_int16{fn: add_int16_Neg32768, fnname: "add_int16_Neg32768", in: 32766, want: -2}, test_int16{fn: add_Neg32768_int16, fnname: "add_Neg32768_int16", in: 32767, want: -1}, test_int16{fn: add_int16_Neg32768, fnname: "add_int16_Neg32768", in: 32767, want: -1}, test_int16{fn: add_Neg32767_int16, fnname: "add_Neg32767_int16", in: -32768, want: 1}, test_int16{fn: add_int16_Neg32767, fnname: "add_int16_Neg32767", in: -32768, want: 1}, test_int16{fn: add_Neg32767_int16, fnname: "add_Neg32767_int16", in: -32767, want: 2}, test_int16{fn: add_int16_Neg32767, fnname: "add_int16_Neg32767", in: -32767, want: 2}, test_int16{fn: add_Neg32767_int16, fnname: "add_Neg32767_int16", in: -1, want: -32768}, test_int16{fn: add_int16_Neg32767, fnname: "add_int16_Neg32767", in: -1, want: -32768}, test_int16{fn: add_Neg32767_int16, fnname: "add_Neg32767_int16", in: 0, want: -32767}, test_int16{fn: add_int16_Neg32767, fnname: "add_int16_Neg32767", in: 0, want: -32767}, test_int16{fn: add_Neg32767_int16, fnname: "add_Neg32767_int16", in: 1, want: -32766}, test_int16{fn: add_int16_Neg32767, fnname: "add_int16_Neg32767", in: 1, want: -32766}, test_int16{fn: add_Neg32767_int16, fnname: "add_Neg32767_int16", in: 32766, want: -1}, test_int16{fn: add_int16_Neg32767, fnname: "add_int16_Neg32767", in: 32766, want: -1}, test_int16{fn: add_Neg32767_int16, fnname: "add_Neg32767_int16", in: 32767, want: 0}, test_int16{fn: add_int16_Neg32767, fnname: "add_int16_Neg32767", in: 32767, want: 0}, test_int16{fn: add_Neg1_int16, fnname: "add_Neg1_int16", in: -32768, want: 32767}, test_int16{fn: add_int16_Neg1, fnname: "add_int16_Neg1", in: -32768, want: 32767}, test_int16{fn: add_Neg1_int16, fnname: "add_Neg1_int16", in: -32767, want: -32768}, test_int16{fn: add_int16_Neg1, fnname: "add_int16_Neg1", in: -32767, want: -32768}, test_int16{fn: add_Neg1_int16, fnname: "add_Neg1_int16", in: -1, want: -2}, test_int16{fn: add_int16_Neg1, fnname: "add_int16_Neg1", in: -1, want: -2}, test_int16{fn: add_Neg1_int16, fnname: "add_Neg1_int16", in: 0, want: -1}, test_int16{fn: add_int16_Neg1, fnname: "add_int16_Neg1", in: 0, want: -1}, test_int16{fn: add_Neg1_int16, fnname: "add_Neg1_int16", in: 1, want: 0}, test_int16{fn: add_int16_Neg1, fnname: "add_int16_Neg1", in: 1, want: 0}, test_int16{fn: add_Neg1_int16, fnname: "add_Neg1_int16", in: 32766, want: 32765}, test_int16{fn: add_int16_Neg1, fnname: "add_int16_Neg1", in: 32766, want: 32765}, test_int16{fn: add_Neg1_int16, fnname: "add_Neg1_int16", in: 32767, want: 32766}, test_int16{fn: add_int16_Neg1, fnname: "add_int16_Neg1", in: 32767, want: 32766}, test_int16{fn: add_0_int16, fnname: "add_0_int16", in: -32768, want: -32768}, test_int16{fn: add_int16_0, fnname: "add_int16_0", in: -32768, want: -32768}, test_int16{fn: add_0_int16, fnname: "add_0_int16", in: -32767, want: -32767}, test_int16{fn: add_int16_0, fnname: "add_int16_0", in: -32767, want: -32767}, test_int16{fn: add_0_int16, fnname: "add_0_int16", in: -1, want: -1}, test_int16{fn: add_int16_0, fnname: "add_int16_0", in: -1, want: -1}, test_int16{fn: add_0_int16, fnname: "add_0_int16", in: 0, want: 0}, test_int16{fn: add_int16_0, fnname: "add_int16_0", in: 0, want: 0}, test_int16{fn: add_0_int16, fnname: "add_0_int16", in: 1, want: 1}, test_int16{fn: add_int16_0, fnname: "add_int16_0", in: 1, want: 1}, test_int16{fn: add_0_int16, fnname: "add_0_int16", in: 32766, want: 32766}, test_int16{fn: add_int16_0, fnname: "add_int16_0", in: 32766, want: 32766}, test_int16{fn: add_0_int16, fnname: "add_0_int16", in: 32767, want: 32767}, test_int16{fn: add_int16_0, fnname: "add_int16_0", in: 32767, want: 32767}, test_int16{fn: add_1_int16, fnname: "add_1_int16", in: -32768, want: -32767}, test_int16{fn: add_int16_1, fnname: "add_int16_1", in: -32768, want: -32767}, test_int16{fn: add_1_int16, fnname: "add_1_int16", in: -32767, want: -32766}, test_int16{fn: add_int16_1, fnname: "add_int16_1", in: -32767, want: -32766}, test_int16{fn: add_1_int16, fnname: "add_1_int16", in: -1, want: 0}, test_int16{fn: add_int16_1, fnname: "add_int16_1", in: -1, want: 0}, test_int16{fn: add_1_int16, fnname: "add_1_int16", in: 0, want: 1}, test_int16{fn: add_int16_1, fnname: "add_int16_1", in: 0, want: 1}, test_int16{fn: add_1_int16, fnname: "add_1_int16", in: 1, want: 2}, test_int16{fn: add_int16_1, fnname: "add_int16_1", in: 1, want: 2}, test_int16{fn: add_1_int16, fnname: "add_1_int16", in: 32766, want: 32767}, test_int16{fn: add_int16_1, fnname: "add_int16_1", in: 32766, want: 32767}, test_int16{fn: add_1_int16, fnname: "add_1_int16", in: 32767, want: -32768}, test_int16{fn: add_int16_1, fnname: "add_int16_1", in: 32767, want: -32768}, test_int16{fn: add_32766_int16, fnname: "add_32766_int16", in: -32768, want: -2}, test_int16{fn: add_int16_32766, fnname: "add_int16_32766", in: -32768, want: -2}, test_int16{fn: add_32766_int16, fnname: "add_32766_int16", in: -32767, want: -1}, test_int16{fn: add_int16_32766, fnname: "add_int16_32766", in: -32767, want: -1}, test_int16{fn: add_32766_int16, fnname: "add_32766_int16", in: -1, want: 32765}, test_int16{fn: add_int16_32766, fnname: "add_int16_32766", in: -1, want: 32765}, test_int16{fn: add_32766_int16, fnname: "add_32766_int16", in: 0, want: 32766}, test_int16{fn: add_int16_32766, fnname: "add_int16_32766", in: 0, want: 32766}, test_int16{fn: add_32766_int16, fnname: "add_32766_int16", in: 1, want: 32767}, test_int16{fn: add_int16_32766, fnname: "add_int16_32766", in: 1, want: 32767}, test_int16{fn: add_32766_int16, fnname: "add_32766_int16", in: 32766, want: -4}, test_int16{fn: add_int16_32766, fnname: "add_int16_32766", in: 32766, want: -4}, test_int16{fn: add_32766_int16, fnname: "add_32766_int16", in: 32767, want: -3}, test_int16{fn: add_int16_32766, fnname: "add_int16_32766", in: 32767, want: -3}, test_int16{fn: add_32767_int16, fnname: "add_32767_int16", in: -32768, want: -1}, test_int16{fn: add_int16_32767, fnname: "add_int16_32767", in: -32768, want: -1}, test_int16{fn: add_32767_int16, fnname: "add_32767_int16", in: -32767, want: 0}, test_int16{fn: add_int16_32767, fnname: "add_int16_32767", in: -32767, want: 0}, test_int16{fn: add_32767_int16, fnname: "add_32767_int16", in: -1, want: 32766}, test_int16{fn: add_int16_32767, fnname: "add_int16_32767", in: -1, want: 32766}, test_int16{fn: add_32767_int16, fnname: "add_32767_int16", in: 0, want: 32767}, test_int16{fn: add_int16_32767, fnname: "add_int16_32767", in: 0, want: 32767}, test_int16{fn: add_32767_int16, fnname: "add_32767_int16", in: 1, want: -32768}, test_int16{fn: add_int16_32767, fnname: "add_int16_32767", in: 1, want: -32768}, test_int16{fn: add_32767_int16, fnname: "add_32767_int16", in: 32766, want: -3}, test_int16{fn: add_int16_32767, fnname: "add_int16_32767", in: 32766, want: -3}, test_int16{fn: add_32767_int16, fnname: "add_32767_int16", in: 32767, want: -2}, test_int16{fn: add_int16_32767, fnname: "add_int16_32767", in: 32767, want: -2}, test_int16{fn: sub_Neg32768_int16, fnname: "sub_Neg32768_int16", in: -32768, want: 0}, test_int16{fn: sub_int16_Neg32768, fnname: "sub_int16_Neg32768", in: -32768, want: 0}, test_int16{fn: sub_Neg32768_int16, fnname: "sub_Neg32768_int16", in: -32767, want: -1}, test_int16{fn: sub_int16_Neg32768, fnname: "sub_int16_Neg32768", in: -32767, want: 1}, test_int16{fn: sub_Neg32768_int16, fnname: "sub_Neg32768_int16", in: -1, want: -32767}, test_int16{fn: sub_int16_Neg32768, fnname: "sub_int16_Neg32768", in: -1, want: 32767}, test_int16{fn: sub_Neg32768_int16, fnname: "sub_Neg32768_int16", in: 0, want: -32768}, test_int16{fn: sub_int16_Neg32768, fnname: "sub_int16_Neg32768", in: 0, want: -32768}, test_int16{fn: sub_Neg32768_int16, fnname: "sub_Neg32768_int16", in: 1, want: 32767}, test_int16{fn: sub_int16_Neg32768, fnname: "sub_int16_Neg32768", in: 1, want: -32767}, test_int16{fn: sub_Neg32768_int16, fnname: "sub_Neg32768_int16", in: 32766, want: 2}, test_int16{fn: sub_int16_Neg32768, fnname: "sub_int16_Neg32768", in: 32766, want: -2}, test_int16{fn: sub_Neg32768_int16, fnname: "sub_Neg32768_int16", in: 32767, want: 1}, test_int16{fn: sub_int16_Neg32768, fnname: "sub_int16_Neg32768", in: 32767, want: -1}, test_int16{fn: sub_Neg32767_int16, fnname: "sub_Neg32767_int16", in: -32768, want: 1}, test_int16{fn: sub_int16_Neg32767, fnname: "sub_int16_Neg32767", in: -32768, want: -1}, test_int16{fn: sub_Neg32767_int16, fnname: "sub_Neg32767_int16", in: -32767, want: 0}, test_int16{fn: sub_int16_Neg32767, fnname: "sub_int16_Neg32767", in: -32767, want: 0}, test_int16{fn: sub_Neg32767_int16, fnname: "sub_Neg32767_int16", in: -1, want: -32766}, test_int16{fn: sub_int16_Neg32767, fnname: "sub_int16_Neg32767", in: -1, want: 32766}, test_int16{fn: sub_Neg32767_int16, fnname: "sub_Neg32767_int16", in: 0, want: -32767}, test_int16{fn: sub_int16_Neg32767, fnname: "sub_int16_Neg32767", in: 0, want: 32767}, test_int16{fn: sub_Neg32767_int16, fnname: "sub_Neg32767_int16", in: 1, want: -32768}, test_int16{fn: sub_int16_Neg32767, fnname: "sub_int16_Neg32767", in: 1, want: -32768}, test_int16{fn: sub_Neg32767_int16, fnname: "sub_Neg32767_int16", in: 32766, want: 3}, test_int16{fn: sub_int16_Neg32767, fnname: "sub_int16_Neg32767", in: 32766, want: -3}, test_int16{fn: sub_Neg32767_int16, fnname: "sub_Neg32767_int16", in: 32767, want: 2}, test_int16{fn: sub_int16_Neg32767, fnname: "sub_int16_Neg32767", in: 32767, want: -2}, test_int16{fn: sub_Neg1_int16, fnname: "sub_Neg1_int16", in: -32768, want: 32767}, test_int16{fn: sub_int16_Neg1, fnname: "sub_int16_Neg1", in: -32768, want: -32767}, test_int16{fn: sub_Neg1_int16, fnname: "sub_Neg1_int16", in: -32767, want: 32766}, test_int16{fn: sub_int16_Neg1, fnname: "sub_int16_Neg1", in: -32767, want: -32766}, test_int16{fn: sub_Neg1_int16, fnname: "sub_Neg1_int16", in: -1, want: 0}, test_int16{fn: sub_int16_Neg1, fnname: "sub_int16_Neg1", in: -1, want: 0}, test_int16{fn: sub_Neg1_int16, fnname: "sub_Neg1_int16", in: 0, want: -1}, test_int16{fn: sub_int16_Neg1, fnname: "sub_int16_Neg1", in: 0, want: 1}, test_int16{fn: sub_Neg1_int16, fnname: "sub_Neg1_int16", in: 1, want: -2}, test_int16{fn: sub_int16_Neg1, fnname: "sub_int16_Neg1", in: 1, want: 2}, test_int16{fn: sub_Neg1_int16, fnname: "sub_Neg1_int16", in: 32766, want: -32767}, test_int16{fn: sub_int16_Neg1, fnname: "sub_int16_Neg1", in: 32766, want: 32767}, test_int16{fn: sub_Neg1_int16, fnname: "sub_Neg1_int16", in: 32767, want: -32768}, test_int16{fn: sub_int16_Neg1, fnname: "sub_int16_Neg1", in: 32767, want: -32768}, test_int16{fn: sub_0_int16, fnname: "sub_0_int16", in: -32768, want: -32768}, test_int16{fn: sub_int16_0, fnname: "sub_int16_0", in: -32768, want: -32768}, test_int16{fn: sub_0_int16, fnname: "sub_0_int16", in: -32767, want: 32767}, test_int16{fn: sub_int16_0, fnname: "sub_int16_0", in: -32767, want: -32767}, test_int16{fn: sub_0_int16, fnname: "sub_0_int16", in: -1, want: 1}, test_int16{fn: sub_int16_0, fnname: "sub_int16_0", in: -1, want: -1}, test_int16{fn: sub_0_int16, fnname: "sub_0_int16", in: 0, want: 0}, test_int16{fn: sub_int16_0, fnname: "sub_int16_0", in: 0, want: 0}, test_int16{fn: sub_0_int16, fnname: "sub_0_int16", in: 1, want: -1}, test_int16{fn: sub_int16_0, fnname: "sub_int16_0", in: 1, want: 1}, test_int16{fn: sub_0_int16, fnname: "sub_0_int16", in: 32766, want: -32766}, test_int16{fn: sub_int16_0, fnname: "sub_int16_0", in: 32766, want: 32766}, test_int16{fn: sub_0_int16, fnname: "sub_0_int16", in: 32767, want: -32767}, test_int16{fn: sub_int16_0, fnname: "sub_int16_0", in: 32767, want: 32767}, test_int16{fn: sub_1_int16, fnname: "sub_1_int16", in: -32768, want: -32767}, test_int16{fn: sub_int16_1, fnname: "sub_int16_1", in: -32768, want: 32767}, test_int16{fn: sub_1_int16, fnname: "sub_1_int16", in: -32767, want: -32768}, test_int16{fn: sub_int16_1, fnname: "sub_int16_1", in: -32767, want: -32768}, test_int16{fn: sub_1_int16, fnname: "sub_1_int16", in: -1, want: 2}, test_int16{fn: sub_int16_1, fnname: "sub_int16_1", in: -1, want: -2}, test_int16{fn: sub_1_int16, fnname: "sub_1_int16", in: 0, want: 1}, test_int16{fn: sub_int16_1, fnname: "sub_int16_1", in: 0, want: -1}, test_int16{fn: sub_1_int16, fnname: "sub_1_int16", in: 1, want: 0}, test_int16{fn: sub_int16_1, fnname: "sub_int16_1", in: 1, want: 0}, test_int16{fn: sub_1_int16, fnname: "sub_1_int16", in: 32766, want: -32765}, test_int16{fn: sub_int16_1, fnname: "sub_int16_1", in: 32766, want: 32765}, test_int16{fn: sub_1_int16, fnname: "sub_1_int16", in: 32767, want: -32766}, test_int16{fn: sub_int16_1, fnname: "sub_int16_1", in: 32767, want: 32766}, test_int16{fn: sub_32766_int16, fnname: "sub_32766_int16", in: -32768, want: -2}, test_int16{fn: sub_int16_32766, fnname: "sub_int16_32766", in: -32768, want: 2}, test_int16{fn: sub_32766_int16, fnname: "sub_32766_int16", in: -32767, want: -3}, test_int16{fn: sub_int16_32766, fnname: "sub_int16_32766", in: -32767, want: 3}, test_int16{fn: sub_32766_int16, fnname: "sub_32766_int16", in: -1, want: 32767}, test_int16{fn: sub_int16_32766, fnname: "sub_int16_32766", in: -1, want: -32767}, test_int16{fn: sub_32766_int16, fnname: "sub_32766_int16", in: 0, want: 32766}, test_int16{fn: sub_int16_32766, fnname: "sub_int16_32766", in: 0, want: -32766}, test_int16{fn: sub_32766_int16, fnname: "sub_32766_int16", in: 1, want: 32765}, test_int16{fn: sub_int16_32766, fnname: "sub_int16_32766", in: 1, want: -32765}, test_int16{fn: sub_32766_int16, fnname: "sub_32766_int16", in: 32766, want: 0}, test_int16{fn: sub_int16_32766, fnname: "sub_int16_32766", in: 32766, want: 0}, test_int16{fn: sub_32766_int16, fnname: "sub_32766_int16", in: 32767, want: -1}, test_int16{fn: sub_int16_32766, fnname: "sub_int16_32766", in: 32767, want: 1}, test_int16{fn: sub_32767_int16, fnname: "sub_32767_int16", in: -32768, want: -1}, test_int16{fn: sub_int16_32767, fnname: "sub_int16_32767", in: -32768, want: 1}, test_int16{fn: sub_32767_int16, fnname: "sub_32767_int16", in: -32767, want: -2}, test_int16{fn: sub_int16_32767, fnname: "sub_int16_32767", in: -32767, want: 2}, test_int16{fn: sub_32767_int16, fnname: "sub_32767_int16", in: -1, want: -32768}, test_int16{fn: sub_int16_32767, fnname: "sub_int16_32767", in: -1, want: -32768}, test_int16{fn: sub_32767_int16, fnname: "sub_32767_int16", in: 0, want: 32767}, test_int16{fn: sub_int16_32767, fnname: "sub_int16_32767", in: 0, want: -32767}, test_int16{fn: sub_32767_int16, fnname: "sub_32767_int16", in: 1, want: 32766}, test_int16{fn: sub_int16_32767, fnname: "sub_int16_32767", in: 1, want: -32766}, test_int16{fn: sub_32767_int16, fnname: "sub_32767_int16", in: 32766, want: 1}, test_int16{fn: sub_int16_32767, fnname: "sub_int16_32767", in: 32766, want: -1}, test_int16{fn: sub_32767_int16, fnname: "sub_32767_int16", in: 32767, want: 0}, test_int16{fn: sub_int16_32767, fnname: "sub_int16_32767", in: 32767, want: 0}, test_int16{fn: div_Neg32768_int16, fnname: "div_Neg32768_int16", in: -32768, want: 1}, test_int16{fn: div_int16_Neg32768, fnname: "div_int16_Neg32768", in: -32768, want: 1}, test_int16{fn: div_Neg32768_int16, fnname: "div_Neg32768_int16", in: -32767, want: 1}, test_int16{fn: div_int16_Neg32768, fnname: "div_int16_Neg32768", in: -32767, want: 0}, test_int16{fn: div_Neg32768_int16, fnname: "div_Neg32768_int16", in: -1, want: -32768}, test_int16{fn: div_int16_Neg32768, fnname: "div_int16_Neg32768", in: -1, want: 0}, test_int16{fn: div_int16_Neg32768, fnname: "div_int16_Neg32768", in: 0, want: 0}, test_int16{fn: div_Neg32768_int16, fnname: "div_Neg32768_int16", in: 1, want: -32768}, test_int16{fn: div_int16_Neg32768, fnname: "div_int16_Neg32768", in: 1, want: 0}, test_int16{fn: div_Neg32768_int16, fnname: "div_Neg32768_int16", in: 32766, want: -1}, test_int16{fn: div_int16_Neg32768, fnname: "div_int16_Neg32768", in: 32766, want: 0}, test_int16{fn: div_Neg32768_int16, fnname: "div_Neg32768_int16", in: 32767, want: -1}, test_int16{fn: div_int16_Neg32768, fnname: "div_int16_Neg32768", in: 32767, want: 0}, test_int16{fn: div_Neg32767_int16, fnname: "div_Neg32767_int16", in: -32768, want: 0}, test_int16{fn: div_int16_Neg32767, fnname: "div_int16_Neg32767", in: -32768, want: 1}, test_int16{fn: div_Neg32767_int16, fnname: "div_Neg32767_int16", in: -32767, want: 1}, test_int16{fn: div_int16_Neg32767, fnname: "div_int16_Neg32767", in: -32767, want: 1}, test_int16{fn: div_Neg32767_int16, fnname: "div_Neg32767_int16", in: -1, want: 32767}, test_int16{fn: div_int16_Neg32767, fnname: "div_int16_Neg32767", in: -1, want: 0}, test_int16{fn: div_int16_Neg32767, fnname: "div_int16_Neg32767", in: 0, want: 0}, test_int16{fn: div_Neg32767_int16, fnname: "div_Neg32767_int16", in: 1, want: -32767}, test_int16{fn: div_int16_Neg32767, fnname: "div_int16_Neg32767", in: 1, want: 0}, test_int16{fn: div_Neg32767_int16, fnname: "div_Neg32767_int16", in: 32766, want: -1}, test_int16{fn: div_int16_Neg32767, fnname: "div_int16_Neg32767", in: 32766, want: 0}, test_int16{fn: div_Neg32767_int16, fnname: "div_Neg32767_int16", in: 32767, want: -1}, test_int16{fn: div_int16_Neg32767, fnname: "div_int16_Neg32767", in: 32767, want: -1}, test_int16{fn: div_Neg1_int16, fnname: "div_Neg1_int16", in: -32768, want: 0}, test_int16{fn: div_int16_Neg1, fnname: "div_int16_Neg1", in: -32768, want: -32768}, test_int16{fn: div_Neg1_int16, fnname: "div_Neg1_int16", in: -32767, want: 0}, test_int16{fn: div_int16_Neg1, fnname: "div_int16_Neg1", in: -32767, want: 32767}, test_int16{fn: div_Neg1_int16, fnname: "div_Neg1_int16", in: -1, want: 1}, test_int16{fn: div_int16_Neg1, fnname: "div_int16_Neg1", in: -1, want: 1}, test_int16{fn: div_int16_Neg1, fnname: "div_int16_Neg1", in: 0, want: 0}, test_int16{fn: div_Neg1_int16, fnname: "div_Neg1_int16", in: 1, want: -1}, test_int16{fn: div_int16_Neg1, fnname: "div_int16_Neg1", in: 1, want: -1}, test_int16{fn: div_Neg1_int16, fnname: "div_Neg1_int16", in: 32766, want: 0}, test_int16{fn: div_int16_Neg1, fnname: "div_int16_Neg1", in: 32766, want: -32766}, test_int16{fn: div_Neg1_int16, fnname: "div_Neg1_int16", in: 32767, want: 0}, test_int16{fn: div_int16_Neg1, fnname: "div_int16_Neg1", in: 32767, want: -32767}, test_int16{fn: div_0_int16, fnname: "div_0_int16", in: -32768, want: 0}, test_int16{fn: div_0_int16, fnname: "div_0_int16", in: -32767, want: 0}, test_int16{fn: div_0_int16, fnname: "div_0_int16", in: -1, want: 0}, test_int16{fn: div_0_int16, fnname: "div_0_int16", in: 1, want: 0}, test_int16{fn: div_0_int16, fnname: "div_0_int16", in: 32766, want: 0}, test_int16{fn: div_0_int16, fnname: "div_0_int16", in: 32767, want: 0}, test_int16{fn: div_1_int16, fnname: "div_1_int16", in: -32768, want: 0}, test_int16{fn: div_int16_1, fnname: "div_int16_1", in: -32768, want: -32768}, test_int16{fn: div_1_int16, fnname: "div_1_int16", in: -32767, want: 0}, test_int16{fn: div_int16_1, fnname: "div_int16_1", in: -32767, want: -32767}, test_int16{fn: div_1_int16, fnname: "div_1_int16", in: -1, want: -1}, test_int16{fn: div_int16_1, fnname: "div_int16_1", in: -1, want: -1}, test_int16{fn: div_int16_1, fnname: "div_int16_1", in: 0, want: 0}, test_int16{fn: div_1_int16, fnname: "div_1_int16", in: 1, want: 1}, test_int16{fn: div_int16_1, fnname: "div_int16_1", in: 1, want: 1}, test_int16{fn: div_1_int16, fnname: "div_1_int16", in: 32766, want: 0}, test_int16{fn: div_int16_1, fnname: "div_int16_1", in: 32766, want: 32766}, test_int16{fn: div_1_int16, fnname: "div_1_int16", in: 32767, want: 0}, test_int16{fn: div_int16_1, fnname: "div_int16_1", in: 32767, want: 32767}, test_int16{fn: div_32766_int16, fnname: "div_32766_int16", in: -32768, want: 0}, test_int16{fn: div_int16_32766, fnname: "div_int16_32766", in: -32768, want: -1}, test_int16{fn: div_32766_int16, fnname: "div_32766_int16", in: -32767, want: 0}, test_int16{fn: div_int16_32766, fnname: "div_int16_32766", in: -32767, want: -1}, test_int16{fn: div_32766_int16, fnname: "div_32766_int16", in: -1, want: -32766}, test_int16{fn: div_int16_32766, fnname: "div_int16_32766", in: -1, want: 0}, test_int16{fn: div_int16_32766, fnname: "div_int16_32766", in: 0, want: 0}, test_int16{fn: div_32766_int16, fnname: "div_32766_int16", in: 1, want: 32766}, test_int16{fn: div_int16_32766, fnname: "div_int16_32766", in: 1, want: 0}, test_int16{fn: div_32766_int16, fnname: "div_32766_int16", in: 32766, want: 1}, test_int16{fn: div_int16_32766, fnname: "div_int16_32766", in: 32766, want: 1}, test_int16{fn: div_32766_int16, fnname: "div_32766_int16", in: 32767, want: 0}, test_int16{fn: div_int16_32766, fnname: "div_int16_32766", in: 32767, want: 1}, test_int16{fn: div_32767_int16, fnname: "div_32767_int16", in: -32768, want: 0}, test_int16{fn: div_int16_32767, fnname: "div_int16_32767", in: -32768, want: -1}, test_int16{fn: div_32767_int16, fnname: "div_32767_int16", in: -32767, want: -1}, test_int16{fn: div_int16_32767, fnname: "div_int16_32767", in: -32767, want: -1}, test_int16{fn: div_32767_int16, fnname: "div_32767_int16", in: -1, want: -32767}, test_int16{fn: div_int16_32767, fnname: "div_int16_32767", in: -1, want: 0}, test_int16{fn: div_int16_32767, fnname: "div_int16_32767", in: 0, want: 0}, test_int16{fn: div_32767_int16, fnname: "div_32767_int16", in: 1, want: 32767}, test_int16{fn: div_int16_32767, fnname: "div_int16_32767", in: 1, want: 0}, test_int16{fn: div_32767_int16, fnname: "div_32767_int16", in: 32766, want: 1}, test_int16{fn: div_int16_32767, fnname: "div_int16_32767", in: 32766, want: 0}, test_int16{fn: div_32767_int16, fnname: "div_32767_int16", in: 32767, want: 1}, test_int16{fn: div_int16_32767, fnname: "div_int16_32767", in: 32767, want: 1}, test_int16{fn: mul_Neg32768_int16, fnname: "mul_Neg32768_int16", in: -32768, want: 0}, test_int16{fn: mul_int16_Neg32768, fnname: "mul_int16_Neg32768", in: -32768, want: 0}, test_int16{fn: mul_Neg32768_int16, fnname: "mul_Neg32768_int16", in: -32767, want: -32768}, test_int16{fn: mul_int16_Neg32768, fnname: "mul_int16_Neg32768", in: -32767, want: -32768}, test_int16{fn: mul_Neg32768_int16, fnname: "mul_Neg32768_int16", in: -1, want: -32768}, test_int16{fn: mul_int16_Neg32768, fnname: "mul_int16_Neg32768", in: -1, want: -32768}, test_int16{fn: mul_Neg32768_int16, fnname: "mul_Neg32768_int16", in: 0, want: 0}, test_int16{fn: mul_int16_Neg32768, fnname: "mul_int16_Neg32768", in: 0, want: 0}, test_int16{fn: mul_Neg32768_int16, fnname: "mul_Neg32768_int16", in: 1, want: -32768}, test_int16{fn: mul_int16_Neg32768, fnname: "mul_int16_Neg32768", in: 1, want: -32768}, test_int16{fn: mul_Neg32768_int16, fnname: "mul_Neg32768_int16", in: 32766, want: 0}, test_int16{fn: mul_int16_Neg32768, fnname: "mul_int16_Neg32768", in: 32766, want: 0}, test_int16{fn: mul_Neg32768_int16, fnname: "mul_Neg32768_int16", in: 32767, want: -32768}, test_int16{fn: mul_int16_Neg32768, fnname: "mul_int16_Neg32768", in: 32767, want: -32768}, test_int16{fn: mul_Neg32767_int16, fnname: "mul_Neg32767_int16", in: -32768, want: -32768}, test_int16{fn: mul_int16_Neg32767, fnname: "mul_int16_Neg32767", in: -32768, want: -32768}, test_int16{fn: mul_Neg32767_int16, fnname: "mul_Neg32767_int16", in: -32767, want: 1}, test_int16{fn: mul_int16_Neg32767, fnname: "mul_int16_Neg32767", in: -32767, want: 1}, test_int16{fn: mul_Neg32767_int16, fnname: "mul_Neg32767_int16", in: -1, want: 32767}, test_int16{fn: mul_int16_Neg32767, fnname: "mul_int16_Neg32767", in: -1, want: 32767}, test_int16{fn: mul_Neg32767_int16, fnname: "mul_Neg32767_int16", in: 0, want: 0}, test_int16{fn: mul_int16_Neg32767, fnname: "mul_int16_Neg32767", in: 0, want: 0}, test_int16{fn: mul_Neg32767_int16, fnname: "mul_Neg32767_int16", in: 1, want: -32767}, test_int16{fn: mul_int16_Neg32767, fnname: "mul_int16_Neg32767", in: 1, want: -32767}, test_int16{fn: mul_Neg32767_int16, fnname: "mul_Neg32767_int16", in: 32766, want: 32766}, test_int16{fn: mul_int16_Neg32767, fnname: "mul_int16_Neg32767", in: 32766, want: 32766}, test_int16{fn: mul_Neg32767_int16, fnname: "mul_Neg32767_int16", in: 32767, want: -1}, test_int16{fn: mul_int16_Neg32767, fnname: "mul_int16_Neg32767", in: 32767, want: -1}, test_int16{fn: mul_Neg1_int16, fnname: "mul_Neg1_int16", in: -32768, want: -32768}, test_int16{fn: mul_int16_Neg1, fnname: "mul_int16_Neg1", in: -32768, want: -32768}, test_int16{fn: mul_Neg1_int16, fnname: "mul_Neg1_int16", in: -32767, want: 32767}, test_int16{fn: mul_int16_Neg1, fnname: "mul_int16_Neg1", in: -32767, want: 32767}, test_int16{fn: mul_Neg1_int16, fnname: "mul_Neg1_int16", in: -1, want: 1}, test_int16{fn: mul_int16_Neg1, fnname: "mul_int16_Neg1", in: -1, want: 1}, test_int16{fn: mul_Neg1_int16, fnname: "mul_Neg1_int16", in: 0, want: 0}, test_int16{fn: mul_int16_Neg1, fnname: "mul_int16_Neg1", in: 0, want: 0}, test_int16{fn: mul_Neg1_int16, fnname: "mul_Neg1_int16", in: 1, want: -1}, test_int16{fn: mul_int16_Neg1, fnname: "mul_int16_Neg1", in: 1, want: -1}, test_int16{fn: mul_Neg1_int16, fnname: "mul_Neg1_int16", in: 32766, want: -32766}, test_int16{fn: mul_int16_Neg1, fnname: "mul_int16_Neg1", in: 32766, want: -32766}, test_int16{fn: mul_Neg1_int16, fnname: "mul_Neg1_int16", in: 32767, want: -32767}, test_int16{fn: mul_int16_Neg1, fnname: "mul_int16_Neg1", in: 32767, want: -32767}, test_int16{fn: mul_0_int16, fnname: "mul_0_int16", in: -32768, want: 0}, test_int16{fn: mul_int16_0, fnname: "mul_int16_0", in: -32768, want: 0}, test_int16{fn: mul_0_int16, fnname: "mul_0_int16", in: -32767, want: 0}, test_int16{fn: mul_int16_0, fnname: "mul_int16_0", in: -32767, want: 0}, test_int16{fn: mul_0_int16, fnname: "mul_0_int16", in: -1, want: 0}, test_int16{fn: mul_int16_0, fnname: "mul_int16_0", in: -1, want: 0}, test_int16{fn: mul_0_int16, fnname: "mul_0_int16", in: 0, want: 0}, test_int16{fn: mul_int16_0, fnname: "mul_int16_0", in: 0, want: 0}, test_int16{fn: mul_0_int16, fnname: "mul_0_int16", in: 1, want: 0}, test_int16{fn: mul_int16_0, fnname: "mul_int16_0", in: 1, want: 0}, test_int16{fn: mul_0_int16, fnname: "mul_0_int16", in: 32766, want: 0}, test_int16{fn: mul_int16_0, fnname: "mul_int16_0", in: 32766, want: 0}, test_int16{fn: mul_0_int16, fnname: "mul_0_int16", in: 32767, want: 0}, test_int16{fn: mul_int16_0, fnname: "mul_int16_0", in: 32767, want: 0}, test_int16{fn: mul_1_int16, fnname: "mul_1_int16", in: -32768, want: -32768}, test_int16{fn: mul_int16_1, fnname: "mul_int16_1", in: -32768, want: -32768}, test_int16{fn: mul_1_int16, fnname: "mul_1_int16", in: -32767, want: -32767}, test_int16{fn: mul_int16_1, fnname: "mul_int16_1", in: -32767, want: -32767}, test_int16{fn: mul_1_int16, fnname: "mul_1_int16", in: -1, want: -1}, test_int16{fn: mul_int16_1, fnname: "mul_int16_1", in: -1, want: -1}, test_int16{fn: mul_1_int16, fnname: "mul_1_int16", in: 0, want: 0}, test_int16{fn: mul_int16_1, fnname: "mul_int16_1", in: 0, want: 0}, test_int16{fn: mul_1_int16, fnname: "mul_1_int16", in: 1, want: 1}, test_int16{fn: mul_int16_1, fnname: "mul_int16_1", in: 1, want: 1}, test_int16{fn: mul_1_int16, fnname: "mul_1_int16", in: 32766, want: 32766}, test_int16{fn: mul_int16_1, fnname: "mul_int16_1", in: 32766, want: 32766}, test_int16{fn: mul_1_int16, fnname: "mul_1_int16", in: 32767, want: 32767}, test_int16{fn: mul_int16_1, fnname: "mul_int16_1", in: 32767, want: 32767}, test_int16{fn: mul_32766_int16, fnname: "mul_32766_int16", in: -32768, want: 0}, test_int16{fn: mul_int16_32766, fnname: "mul_int16_32766", in: -32768, want: 0}, test_int16{fn: mul_32766_int16, fnname: "mul_32766_int16", in: -32767, want: 32766}, test_int16{fn: mul_int16_32766, fnname: "mul_int16_32766", in: -32767, want: 32766}, test_int16{fn: mul_32766_int16, fnname: "mul_32766_int16", in: -1, want: -32766}, test_int16{fn: mul_int16_32766, fnname: "mul_int16_32766", in: -1, want: -32766}, test_int16{fn: mul_32766_int16, fnname: "mul_32766_int16", in: 0, want: 0}, test_int16{fn: mul_int16_32766, fnname: "mul_int16_32766", in: 0, want: 0}, test_int16{fn: mul_32766_int16, fnname: "mul_32766_int16", in: 1, want: 32766}, test_int16{fn: mul_int16_32766, fnname: "mul_int16_32766", in: 1, want: 32766}, test_int16{fn: mul_32766_int16, fnname: "mul_32766_int16", in: 32766, want: 4}, test_int16{fn: mul_int16_32766, fnname: "mul_int16_32766", in: 32766, want: 4}, test_int16{fn: mul_32766_int16, fnname: "mul_32766_int16", in: 32767, want: -32766}, test_int16{fn: mul_int16_32766, fnname: "mul_int16_32766", in: 32767, want: -32766}, test_int16{fn: mul_32767_int16, fnname: "mul_32767_int16", in: -32768, want: -32768}, test_int16{fn: mul_int16_32767, fnname: "mul_int16_32767", in: -32768, want: -32768}, test_int16{fn: mul_32767_int16, fnname: "mul_32767_int16", in: -32767, want: -1}, test_int16{fn: mul_int16_32767, fnname: "mul_int16_32767", in: -32767, want: -1}, test_int16{fn: mul_32767_int16, fnname: "mul_32767_int16", in: -1, want: -32767}, test_int16{fn: mul_int16_32767, fnname: "mul_int16_32767", in: -1, want: -32767}, test_int16{fn: mul_32767_int16, fnname: "mul_32767_int16", in: 0, want: 0}, test_int16{fn: mul_int16_32767, fnname: "mul_int16_32767", in: 0, want: 0}, test_int16{fn: mul_32767_int16, fnname: "mul_32767_int16", in: 1, want: 32767}, test_int16{fn: mul_int16_32767, fnname: "mul_int16_32767", in: 1, want: 32767}, test_int16{fn: mul_32767_int16, fnname: "mul_32767_int16", in: 32766, want: -32766}, test_int16{fn: mul_int16_32767, fnname: "mul_int16_32767", in: 32766, want: -32766}, test_int16{fn: mul_32767_int16, fnname: "mul_32767_int16", in: 32767, want: 1}, test_int16{fn: mul_int16_32767, fnname: "mul_int16_32767", in: 32767, want: 1}, test_int16{fn: mod_Neg32768_int16, fnname: "mod_Neg32768_int16", in: -32768, want: 0}, test_int16{fn: mod_int16_Neg32768, fnname: "mod_int16_Neg32768", in: -32768, want: 0}, test_int16{fn: mod_Neg32768_int16, fnname: "mod_Neg32768_int16", in: -32767, want: -1}, test_int16{fn: mod_int16_Neg32768, fnname: "mod_int16_Neg32768", in: -32767, want: -32767}, test_int16{fn: mod_Neg32768_int16, fnname: "mod_Neg32768_int16", in: -1, want: 0}, test_int16{fn: mod_int16_Neg32768, fnname: "mod_int16_Neg32768", in: -1, want: -1}, test_int16{fn: mod_int16_Neg32768, fnname: "mod_int16_Neg32768", in: 0, want: 0}, test_int16{fn: mod_Neg32768_int16, fnname: "mod_Neg32768_int16", in: 1, want: 0}, test_int16{fn: mod_int16_Neg32768, fnname: "mod_int16_Neg32768", in: 1, want: 1}, test_int16{fn: mod_Neg32768_int16, fnname: "mod_Neg32768_int16", in: 32766, want: -2}, test_int16{fn: mod_int16_Neg32768, fnname: "mod_int16_Neg32768", in: 32766, want: 32766}, test_int16{fn: mod_Neg32768_int16, fnname: "mod_Neg32768_int16", in: 32767, want: -1}, test_int16{fn: mod_int16_Neg32768, fnname: "mod_int16_Neg32768", in: 32767, want: 32767}, test_int16{fn: mod_Neg32767_int16, fnname: "mod_Neg32767_int16", in: -32768, want: -32767}, test_int16{fn: mod_int16_Neg32767, fnname: "mod_int16_Neg32767", in: -32768, want: -1}, test_int16{fn: mod_Neg32767_int16, fnname: "mod_Neg32767_int16", in: -32767, want: 0}, test_int16{fn: mod_int16_Neg32767, fnname: "mod_int16_Neg32767", in: -32767, want: 0}, test_int16{fn: mod_Neg32767_int16, fnname: "mod_Neg32767_int16", in: -1, want: 0}, test_int16{fn: mod_int16_Neg32767, fnname: "mod_int16_Neg32767", in: -1, want: -1}, test_int16{fn: mod_int16_Neg32767, fnname: "mod_int16_Neg32767", in: 0, want: 0}, test_int16{fn: mod_Neg32767_int16, fnname: "mod_Neg32767_int16", in: 1, want: 0}, test_int16{fn: mod_int16_Neg32767, fnname: "mod_int16_Neg32767", in: 1, want: 1}, test_int16{fn: mod_Neg32767_int16, fnname: "mod_Neg32767_int16", in: 32766, want: -1}, test_int16{fn: mod_int16_Neg32767, fnname: "mod_int16_Neg32767", in: 32766, want: 32766}, test_int16{fn: mod_Neg32767_int16, fnname: "mod_Neg32767_int16", in: 32767, want: 0}, test_int16{fn: mod_int16_Neg32767, fnname: "mod_int16_Neg32767", in: 32767, want: 0}, test_int16{fn: mod_Neg1_int16, fnname: "mod_Neg1_int16", in: -32768, want: -1}, test_int16{fn: mod_int16_Neg1, fnname: "mod_int16_Neg1", in: -32768, want: 0}, test_int16{fn: mod_Neg1_int16, fnname: "mod_Neg1_int16", in: -32767, want: -1}, test_int16{fn: mod_int16_Neg1, fnname: "mod_int16_Neg1", in: -32767, want: 0}, test_int16{fn: mod_Neg1_int16, fnname: "mod_Neg1_int16", in: -1, want: 0}, test_int16{fn: mod_int16_Neg1, fnname: "mod_int16_Neg1", in: -1, want: 0}, test_int16{fn: mod_int16_Neg1, fnname: "mod_int16_Neg1", in: 0, want: 0}, test_int16{fn: mod_Neg1_int16, fnname: "mod_Neg1_int16", in: 1, want: 0}, test_int16{fn: mod_int16_Neg1, fnname: "mod_int16_Neg1", in: 1, want: 0}, test_int16{fn: mod_Neg1_int16, fnname: "mod_Neg1_int16", in: 32766, want: -1}, test_int16{fn: mod_int16_Neg1, fnname: "mod_int16_Neg1", in: 32766, want: 0}, test_int16{fn: mod_Neg1_int16, fnname: "mod_Neg1_int16", in: 32767, want: -1}, test_int16{fn: mod_int16_Neg1, fnname: "mod_int16_Neg1", in: 32767, want: 0}, test_int16{fn: mod_0_int16, fnname: "mod_0_int16", in: -32768, want: 0}, test_int16{fn: mod_0_int16, fnname: "mod_0_int16", in: -32767, want: 0}, test_int16{fn: mod_0_int16, fnname: "mod_0_int16", in: -1, want: 0}, test_int16{fn: mod_0_int16, fnname: "mod_0_int16", in: 1, want: 0}, test_int16{fn: mod_0_int16, fnname: "mod_0_int16", in: 32766, want: 0}, test_int16{fn: mod_0_int16, fnname: "mod_0_int16", in: 32767, want: 0}, test_int16{fn: mod_1_int16, fnname: "mod_1_int16", in: -32768, want: 1}, test_int16{fn: mod_int16_1, fnname: "mod_int16_1", in: -32768, want: 0}, test_int16{fn: mod_1_int16, fnname: "mod_1_int16", in: -32767, want: 1}, test_int16{fn: mod_int16_1, fnname: "mod_int16_1", in: -32767, want: 0}, test_int16{fn: mod_1_int16, fnname: "mod_1_int16", in: -1, want: 0}, test_int16{fn: mod_int16_1, fnname: "mod_int16_1", in: -1, want: 0}, test_int16{fn: mod_int16_1, fnname: "mod_int16_1", in: 0, want: 0}, test_int16{fn: mod_1_int16, fnname: "mod_1_int16", in: 1, want: 0}, test_int16{fn: mod_int16_1, fnname: "mod_int16_1", in: 1, want: 0}, test_int16{fn: mod_1_int16, fnname: "mod_1_int16", in: 32766, want: 1}, test_int16{fn: mod_int16_1, fnname: "mod_int16_1", in: 32766, want: 0}, test_int16{fn: mod_1_int16, fnname: "mod_1_int16", in: 32767, want: 1}, test_int16{fn: mod_int16_1, fnname: "mod_int16_1", in: 32767, want: 0}, test_int16{fn: mod_32766_int16, fnname: "mod_32766_int16", in: -32768, want: 32766}, test_int16{fn: mod_int16_32766, fnname: "mod_int16_32766", in: -32768, want: -2}, test_int16{fn: mod_32766_int16, fnname: "mod_32766_int16", in: -32767, want: 32766}, test_int16{fn: mod_int16_32766, fnname: "mod_int16_32766", in: -32767, want: -1}, test_int16{fn: mod_32766_int16, fnname: "mod_32766_int16", in: -1, want: 0}, test_int16{fn: mod_int16_32766, fnname: "mod_int16_32766", in: -1, want: -1}, test_int16{fn: mod_int16_32766, fnname: "mod_int16_32766", in: 0, want: 0}, test_int16{fn: mod_32766_int16, fnname: "mod_32766_int16", in: 1, want: 0}, test_int16{fn: mod_int16_32766, fnname: "mod_int16_32766", in: 1, want: 1}, test_int16{fn: mod_32766_int16, fnname: "mod_32766_int16", in: 32766, want: 0}, test_int16{fn: mod_int16_32766, fnname: "mod_int16_32766", in: 32766, want: 0}, test_int16{fn: mod_32766_int16, fnname: "mod_32766_int16", in: 32767, want: 32766}, test_int16{fn: mod_int16_32766, fnname: "mod_int16_32766", in: 32767, want: 1}, test_int16{fn: mod_32767_int16, fnname: "mod_32767_int16", in: -32768, want: 32767}, test_int16{fn: mod_int16_32767, fnname: "mod_int16_32767", in: -32768, want: -1}, test_int16{fn: mod_32767_int16, fnname: "mod_32767_int16", in: -32767, want: 0}, test_int16{fn: mod_int16_32767, fnname: "mod_int16_32767", in: -32767, want: 0}, test_int16{fn: mod_32767_int16, fnname: "mod_32767_int16", in: -1, want: 0}, test_int16{fn: mod_int16_32767, fnname: "mod_int16_32767", in: -1, want: -1}, test_int16{fn: mod_int16_32767, fnname: "mod_int16_32767", in: 0, want: 0}, test_int16{fn: mod_32767_int16, fnname: "mod_32767_int16", in: 1, want: 0}, test_int16{fn: mod_int16_32767, fnname: "mod_int16_32767", in: 1, want: 1}, test_int16{fn: mod_32767_int16, fnname: "mod_32767_int16", in: 32766, want: 1}, test_int16{fn: mod_int16_32767, fnname: "mod_int16_32767", in: 32766, want: 32766}, test_int16{fn: mod_32767_int16, fnname: "mod_32767_int16", in: 32767, want: 0}, test_int16{fn: mod_int16_32767, fnname: "mod_int16_32767", in: 32767, want: 0}, test_int16{fn: and_Neg32768_int16, fnname: "and_Neg32768_int16", in: -32768, want: -32768}, test_int16{fn: and_int16_Neg32768, fnname: "and_int16_Neg32768", in: -32768, want: -32768}, test_int16{fn: and_Neg32768_int16, fnname: "and_Neg32768_int16", in: -32767, want: -32768}, test_int16{fn: and_int16_Neg32768, fnname: "and_int16_Neg32768", in: -32767, want: -32768}, test_int16{fn: and_Neg32768_int16, fnname: "and_Neg32768_int16", in: -1, want: -32768}, test_int16{fn: and_int16_Neg32768, fnname: "and_int16_Neg32768", in: -1, want: -32768}, test_int16{fn: and_Neg32768_int16, fnname: "and_Neg32768_int16", in: 0, want: 0}, test_int16{fn: and_int16_Neg32768, fnname: "and_int16_Neg32768", in: 0, want: 0}, test_int16{fn: and_Neg32768_int16, fnname: "and_Neg32768_int16", in: 1, want: 0}, test_int16{fn: and_int16_Neg32768, fnname: "and_int16_Neg32768", in: 1, want: 0}, test_int16{fn: and_Neg32768_int16, fnname: "and_Neg32768_int16", in: 32766, want: 0}, test_int16{fn: and_int16_Neg32768, fnname: "and_int16_Neg32768", in: 32766, want: 0}, test_int16{fn: and_Neg32768_int16, fnname: "and_Neg32768_int16", in: 32767, want: 0}, test_int16{fn: and_int16_Neg32768, fnname: "and_int16_Neg32768", in: 32767, want: 0}, test_int16{fn: and_Neg32767_int16, fnname: "and_Neg32767_int16", in: -32768, want: -32768}, test_int16{fn: and_int16_Neg32767, fnname: "and_int16_Neg32767", in: -32768, want: -32768}, test_int16{fn: and_Neg32767_int16, fnname: "and_Neg32767_int16", in: -32767, want: -32767}, test_int16{fn: and_int16_Neg32767, fnname: "and_int16_Neg32767", in: -32767, want: -32767}, test_int16{fn: and_Neg32767_int16, fnname: "and_Neg32767_int16", in: -1, want: -32767}, test_int16{fn: and_int16_Neg32767, fnname: "and_int16_Neg32767", in: -1, want: -32767}, test_int16{fn: and_Neg32767_int16, fnname: "and_Neg32767_int16", in: 0, want: 0}, test_int16{fn: and_int16_Neg32767, fnname: "and_int16_Neg32767", in: 0, want: 0}, test_int16{fn: and_Neg32767_int16, fnname: "and_Neg32767_int16", in: 1, want: 1}, test_int16{fn: and_int16_Neg32767, fnname: "and_int16_Neg32767", in: 1, want: 1}, test_int16{fn: and_Neg32767_int16, fnname: "and_Neg32767_int16", in: 32766, want: 0}, test_int16{fn: and_int16_Neg32767, fnname: "and_int16_Neg32767", in: 32766, want: 0}, test_int16{fn: and_Neg32767_int16, fnname: "and_Neg32767_int16", in: 32767, want: 1}, test_int16{fn: and_int16_Neg32767, fnname: "and_int16_Neg32767", in: 32767, want: 1}, test_int16{fn: and_Neg1_int16, fnname: "and_Neg1_int16", in: -32768, want: -32768}, test_int16{fn: and_int16_Neg1, fnname: "and_int16_Neg1", in: -32768, want: -32768}, test_int16{fn: and_Neg1_int16, fnname: "and_Neg1_int16", in: -32767, want: -32767}, test_int16{fn: and_int16_Neg1, fnname: "and_int16_Neg1", in: -32767, want: -32767}, test_int16{fn: and_Neg1_int16, fnname: "and_Neg1_int16", in: -1, want: -1}, test_int16{fn: and_int16_Neg1, fnname: "and_int16_Neg1", in: -1, want: -1}, test_int16{fn: and_Neg1_int16, fnname: "and_Neg1_int16", in: 0, want: 0}, test_int16{fn: and_int16_Neg1, fnname: "and_int16_Neg1", in: 0, want: 0}, test_int16{fn: and_Neg1_int16, fnname: "and_Neg1_int16", in: 1, want: 1}, test_int16{fn: and_int16_Neg1, fnname: "and_int16_Neg1", in: 1, want: 1}, test_int16{fn: and_Neg1_int16, fnname: "and_Neg1_int16", in: 32766, want: 32766}, test_int16{fn: and_int16_Neg1, fnname: "and_int16_Neg1", in: 32766, want: 32766}, test_int16{fn: and_Neg1_int16, fnname: "and_Neg1_int16", in: 32767, want: 32767}, test_int16{fn: and_int16_Neg1, fnname: "and_int16_Neg1", in: 32767, want: 32767}, test_int16{fn: and_0_int16, fnname: "and_0_int16", in: -32768, want: 0}, test_int16{fn: and_int16_0, fnname: "and_int16_0", in: -32768, want: 0}, test_int16{fn: and_0_int16, fnname: "and_0_int16", in: -32767, want: 0}, test_int16{fn: and_int16_0, fnname: "and_int16_0", in: -32767, want: 0}, test_int16{fn: and_0_int16, fnname: "and_0_int16", in: -1, want: 0}, test_int16{fn: and_int16_0, fnname: "and_int16_0", in: -1, want: 0}, test_int16{fn: and_0_int16, fnname: "and_0_int16", in: 0, want: 0}, test_int16{fn: and_int16_0, fnname: "and_int16_0", in: 0, want: 0}, test_int16{fn: and_0_int16, fnname: "and_0_int16", in: 1, want: 0}, test_int16{fn: and_int16_0, fnname: "and_int16_0", in: 1, want: 0}, test_int16{fn: and_0_int16, fnname: "and_0_int16", in: 32766, want: 0}, test_int16{fn: and_int16_0, fnname: "and_int16_0", in: 32766, want: 0}, test_int16{fn: and_0_int16, fnname: "and_0_int16", in: 32767, want: 0}, test_int16{fn: and_int16_0, fnname: "and_int16_0", in: 32767, want: 0}, test_int16{fn: and_1_int16, fnname: "and_1_int16", in: -32768, want: 0}, test_int16{fn: and_int16_1, fnname: "and_int16_1", in: -32768, want: 0}, test_int16{fn: and_1_int16, fnname: "and_1_int16", in: -32767, want: 1}, test_int16{fn: and_int16_1, fnname: "and_int16_1", in: -32767, want: 1}, test_int16{fn: and_1_int16, fnname: "and_1_int16", in: -1, want: 1}, test_int16{fn: and_int16_1, fnname: "and_int16_1", in: -1, want: 1}, test_int16{fn: and_1_int16, fnname: "and_1_int16", in: 0, want: 0}, test_int16{fn: and_int16_1, fnname: "and_int16_1", in: 0, want: 0}, test_int16{fn: and_1_int16, fnname: "and_1_int16", in: 1, want: 1}, test_int16{fn: and_int16_1, fnname: "and_int16_1", in: 1, want: 1}, test_int16{fn: and_1_int16, fnname: "and_1_int16", in: 32766, want: 0}, test_int16{fn: and_int16_1, fnname: "and_int16_1", in: 32766, want: 0}, test_int16{fn: and_1_int16, fnname: "and_1_int16", in: 32767, want: 1}, test_int16{fn: and_int16_1, fnname: "and_int16_1", in: 32767, want: 1}, test_int16{fn: and_32766_int16, fnname: "and_32766_int16", in: -32768, want: 0}, test_int16{fn: and_int16_32766, fnname: "and_int16_32766", in: -32768, want: 0}, test_int16{fn: and_32766_int16, fnname: "and_32766_int16", in: -32767, want: 0}, test_int16{fn: and_int16_32766, fnname: "and_int16_32766", in: -32767, want: 0}, test_int16{fn: and_32766_int16, fnname: "and_32766_int16", in: -1, want: 32766}, test_int16{fn: and_int16_32766, fnname: "and_int16_32766", in: -1, want: 32766}, test_int16{fn: and_32766_int16, fnname: "and_32766_int16", in: 0, want: 0}, test_int16{fn: and_int16_32766, fnname: "and_int16_32766", in: 0, want: 0}, test_int16{fn: and_32766_int16, fnname: "and_32766_int16", in: 1, want: 0}, test_int16{fn: and_int16_32766, fnname: "and_int16_32766", in: 1, want: 0}, test_int16{fn: and_32766_int16, fnname: "and_32766_int16", in: 32766, want: 32766}, test_int16{fn: and_int16_32766, fnname: "and_int16_32766", in: 32766, want: 32766}, test_int16{fn: and_32766_int16, fnname: "and_32766_int16", in: 32767, want: 32766}, test_int16{fn: and_int16_32766, fnname: "and_int16_32766", in: 32767, want: 32766}, test_int16{fn: and_32767_int16, fnname: "and_32767_int16", in: -32768, want: 0}, test_int16{fn: and_int16_32767, fnname: "and_int16_32767", in: -32768, want: 0}, test_int16{fn: and_32767_int16, fnname: "and_32767_int16", in: -32767, want: 1}, test_int16{fn: and_int16_32767, fnname: "and_int16_32767", in: -32767, want: 1}, test_int16{fn: and_32767_int16, fnname: "and_32767_int16", in: -1, want: 32767}, test_int16{fn: and_int16_32767, fnname: "and_int16_32767", in: -1, want: 32767}, test_int16{fn: and_32767_int16, fnname: "and_32767_int16", in: 0, want: 0}, test_int16{fn: and_int16_32767, fnname: "and_int16_32767", in: 0, want: 0}, test_int16{fn: and_32767_int16, fnname: "and_32767_int16", in: 1, want: 1}, test_int16{fn: and_int16_32767, fnname: "and_int16_32767", in: 1, want: 1}, test_int16{fn: and_32767_int16, fnname: "and_32767_int16", in: 32766, want: 32766}, test_int16{fn: and_int16_32767, fnname: "and_int16_32767", in: 32766, want: 32766}, test_int16{fn: and_32767_int16, fnname: "and_32767_int16", in: 32767, want: 32767}, test_int16{fn: and_int16_32767, fnname: "and_int16_32767", in: 32767, want: 32767}, test_int16{fn: or_Neg32768_int16, fnname: "or_Neg32768_int16", in: -32768, want: -32768}, test_int16{fn: or_int16_Neg32768, fnname: "or_int16_Neg32768", in: -32768, want: -32768}, test_int16{fn: or_Neg32768_int16, fnname: "or_Neg32768_int16", in: -32767, want: -32767}, test_int16{fn: or_int16_Neg32768, fnname: "or_int16_Neg32768", in: -32767, want: -32767}, test_int16{fn: or_Neg32768_int16, fnname: "or_Neg32768_int16", in: -1, want: -1}, test_int16{fn: or_int16_Neg32768, fnname: "or_int16_Neg32768", in: -1, want: -1}, test_int16{fn: or_Neg32768_int16, fnname: "or_Neg32768_int16", in: 0, want: -32768}, test_int16{fn: or_int16_Neg32768, fnname: "or_int16_Neg32768", in: 0, want: -32768}, test_int16{fn: or_Neg32768_int16, fnname: "or_Neg32768_int16", in: 1, want: -32767}, test_int16{fn: or_int16_Neg32768, fnname: "or_int16_Neg32768", in: 1, want: -32767}, test_int16{fn: or_Neg32768_int16, fnname: "or_Neg32768_int16", in: 32766, want: -2}, test_int16{fn: or_int16_Neg32768, fnname: "or_int16_Neg32768", in: 32766, want: -2}, test_int16{fn: or_Neg32768_int16, fnname: "or_Neg32768_int16", in: 32767, want: -1}, test_int16{fn: or_int16_Neg32768, fnname: "or_int16_Neg32768", in: 32767, want: -1}, test_int16{fn: or_Neg32767_int16, fnname: "or_Neg32767_int16", in: -32768, want: -32767}, test_int16{fn: or_int16_Neg32767, fnname: "or_int16_Neg32767", in: -32768, want: -32767}, test_int16{fn: or_Neg32767_int16, fnname: "or_Neg32767_int16", in: -32767, want: -32767}, test_int16{fn: or_int16_Neg32767, fnname: "or_int16_Neg32767", in: -32767, want: -32767}, test_int16{fn: or_Neg32767_int16, fnname: "or_Neg32767_int16", in: -1, want: -1}, test_int16{fn: or_int16_Neg32767, fnname: "or_int16_Neg32767", in: -1, want: -1}, test_int16{fn: or_Neg32767_int16, fnname: "or_Neg32767_int16", in: 0, want: -32767}, test_int16{fn: or_int16_Neg32767, fnname: "or_int16_Neg32767", in: 0, want: -32767}, test_int16{fn: or_Neg32767_int16, fnname: "or_Neg32767_int16", in: 1, want: -32767}, test_int16{fn: or_int16_Neg32767, fnname: "or_int16_Neg32767", in: 1, want: -32767}, test_int16{fn: or_Neg32767_int16, fnname: "or_Neg32767_int16", in: 32766, want: -1}, test_int16{fn: or_int16_Neg32767, fnname: "or_int16_Neg32767", in: 32766, want: -1}, test_int16{fn: or_Neg32767_int16, fnname: "or_Neg32767_int16", in: 32767, want: -1}, test_int16{fn: or_int16_Neg32767, fnname: "or_int16_Neg32767", in: 32767, want: -1}, test_int16{fn: or_Neg1_int16, fnname: "or_Neg1_int16", in: -32768, want: -1}, test_int16{fn: or_int16_Neg1, fnname: "or_int16_Neg1", in: -32768, want: -1}, test_int16{fn: or_Neg1_int16, fnname: "or_Neg1_int16", in: -32767, want: -1}, test_int16{fn: or_int16_Neg1, fnname: "or_int16_Neg1", in: -32767, want: -1}, test_int16{fn: or_Neg1_int16, fnname: "or_Neg1_int16", in: -1, want: -1}, test_int16{fn: or_int16_Neg1, fnname: "or_int16_Neg1", in: -1, want: -1}, test_int16{fn: or_Neg1_int16, fnname: "or_Neg1_int16", in: 0, want: -1}, test_int16{fn: or_int16_Neg1, fnname: "or_int16_Neg1", in: 0, want: -1}, test_int16{fn: or_Neg1_int16, fnname: "or_Neg1_int16", in: 1, want: -1}, test_int16{fn: or_int16_Neg1, fnname: "or_int16_Neg1", in: 1, want: -1}, test_int16{fn: or_Neg1_int16, fnname: "or_Neg1_int16", in: 32766, want: -1}, test_int16{fn: or_int16_Neg1, fnname: "or_int16_Neg1", in: 32766, want: -1}, test_int16{fn: or_Neg1_int16, fnname: "or_Neg1_int16", in: 32767, want: -1}, test_int16{fn: or_int16_Neg1, fnname: "or_int16_Neg1", in: 32767, want: -1}, test_int16{fn: or_0_int16, fnname: "or_0_int16", in: -32768, want: -32768}, test_int16{fn: or_int16_0, fnname: "or_int16_0", in: -32768, want: -32768}, test_int16{fn: or_0_int16, fnname: "or_0_int16", in: -32767, want: -32767}, test_int16{fn: or_int16_0, fnname: "or_int16_0", in: -32767, want: -32767}, test_int16{fn: or_0_int16, fnname: "or_0_int16", in: -1, want: -1}, test_int16{fn: or_int16_0, fnname: "or_int16_0", in: -1, want: -1}, test_int16{fn: or_0_int16, fnname: "or_0_int16", in: 0, want: 0}, test_int16{fn: or_int16_0, fnname: "or_int16_0", in: 0, want: 0}, test_int16{fn: or_0_int16, fnname: "or_0_int16", in: 1, want: 1}, test_int16{fn: or_int16_0, fnname: "or_int16_0", in: 1, want: 1}, test_int16{fn: or_0_int16, fnname: "or_0_int16", in: 32766, want: 32766}, test_int16{fn: or_int16_0, fnname: "or_int16_0", in: 32766, want: 32766}, test_int16{fn: or_0_int16, fnname: "or_0_int16", in: 32767, want: 32767}, test_int16{fn: or_int16_0, fnname: "or_int16_0", in: 32767, want: 32767}, test_int16{fn: or_1_int16, fnname: "or_1_int16", in: -32768, want: -32767}, test_int16{fn: or_int16_1, fnname: "or_int16_1", in: -32768, want: -32767}, test_int16{fn: or_1_int16, fnname: "or_1_int16", in: -32767, want: -32767}, test_int16{fn: or_int16_1, fnname: "or_int16_1", in: -32767, want: -32767}, test_int16{fn: or_1_int16, fnname: "or_1_int16", in: -1, want: -1}, test_int16{fn: or_int16_1, fnname: "or_int16_1", in: -1, want: -1}, test_int16{fn: or_1_int16, fnname: "or_1_int16", in: 0, want: 1}, test_int16{fn: or_int16_1, fnname: "or_int16_1", in: 0, want: 1}, test_int16{fn: or_1_int16, fnname: "or_1_int16", in: 1, want: 1}, test_int16{fn: or_int16_1, fnname: "or_int16_1", in: 1, want: 1}, test_int16{fn: or_1_int16, fnname: "or_1_int16", in: 32766, want: 32767}, test_int16{fn: or_int16_1, fnname: "or_int16_1", in: 32766, want: 32767}, test_int16{fn: or_1_int16, fnname: "or_1_int16", in: 32767, want: 32767}, test_int16{fn: or_int16_1, fnname: "or_int16_1", in: 32767, want: 32767}, test_int16{fn: or_32766_int16, fnname: "or_32766_int16", in: -32768, want: -2}, test_int16{fn: or_int16_32766, fnname: "or_int16_32766", in: -32768, want: -2}, test_int16{fn: or_32766_int16, fnname: "or_32766_int16", in: -32767, want: -1}, test_int16{fn: or_int16_32766, fnname: "or_int16_32766", in: -32767, want: -1}, test_int16{fn: or_32766_int16, fnname: "or_32766_int16", in: -1, want: -1}, test_int16{fn: or_int16_32766, fnname: "or_int16_32766", in: -1, want: -1}, test_int16{fn: or_32766_int16, fnname: "or_32766_int16", in: 0, want: 32766}, test_int16{fn: or_int16_32766, fnname: "or_int16_32766", in: 0, want: 32766}, test_int16{fn: or_32766_int16, fnname: "or_32766_int16", in: 1, want: 32767}, test_int16{fn: or_int16_32766, fnname: "or_int16_32766", in: 1, want: 32767}, test_int16{fn: or_32766_int16, fnname: "or_32766_int16", in: 32766, want: 32766}, test_int16{fn: or_int16_32766, fnname: "or_int16_32766", in: 32766, want: 32766}, test_int16{fn: or_32766_int16, fnname: "or_32766_int16", in: 32767, want: 32767}, test_int16{fn: or_int16_32766, fnname: "or_int16_32766", in: 32767, want: 32767}, test_int16{fn: or_32767_int16, fnname: "or_32767_int16", in: -32768, want: -1}, test_int16{fn: or_int16_32767, fnname: "or_int16_32767", in: -32768, want: -1}, test_int16{fn: or_32767_int16, fnname: "or_32767_int16", in: -32767, want: -1}, test_int16{fn: or_int16_32767, fnname: "or_int16_32767", in: -32767, want: -1}, test_int16{fn: or_32767_int16, fnname: "or_32767_int16", in: -1, want: -1}, test_int16{fn: or_int16_32767, fnname: "or_int16_32767", in: -1, want: -1}, test_int16{fn: or_32767_int16, fnname: "or_32767_int16", in: 0, want: 32767}, test_int16{fn: or_int16_32767, fnname: "or_int16_32767", in: 0, want: 32767}, test_int16{fn: or_32767_int16, fnname: "or_32767_int16", in: 1, want: 32767}, test_int16{fn: or_int16_32767, fnname: "or_int16_32767", in: 1, want: 32767}, test_int16{fn: or_32767_int16, fnname: "or_32767_int16", in: 32766, want: 32767}, test_int16{fn: or_int16_32767, fnname: "or_int16_32767", in: 32766, want: 32767}, test_int16{fn: or_32767_int16, fnname: "or_32767_int16", in: 32767, want: 32767}, test_int16{fn: or_int16_32767, fnname: "or_int16_32767", in: 32767, want: 32767}, test_int16{fn: xor_Neg32768_int16, fnname: "xor_Neg32768_int16", in: -32768, want: 0}, test_int16{fn: xor_int16_Neg32768, fnname: "xor_int16_Neg32768", in: -32768, want: 0}, test_int16{fn: xor_Neg32768_int16, fnname: "xor_Neg32768_int16", in: -32767, want: 1}, test_int16{fn: xor_int16_Neg32768, fnname: "xor_int16_Neg32768", in: -32767, want: 1}, test_int16{fn: xor_Neg32768_int16, fnname: "xor_Neg32768_int16", in: -1, want: 32767}, test_int16{fn: xor_int16_Neg32768, fnname: "xor_int16_Neg32768", in: -1, want: 32767}, test_int16{fn: xor_Neg32768_int16, fnname: "xor_Neg32768_int16", in: 0, want: -32768}, test_int16{fn: xor_int16_Neg32768, fnname: "xor_int16_Neg32768", in: 0, want: -32768}, test_int16{fn: xor_Neg32768_int16, fnname: "xor_Neg32768_int16", in: 1, want: -32767}, test_int16{fn: xor_int16_Neg32768, fnname: "xor_int16_Neg32768", in: 1, want: -32767}, test_int16{fn: xor_Neg32768_int16, fnname: "xor_Neg32768_int16", in: 32766, want: -2}, test_int16{fn: xor_int16_Neg32768, fnname: "xor_int16_Neg32768", in: 32766, want: -2}, test_int16{fn: xor_Neg32768_int16, fnname: "xor_Neg32768_int16", in: 32767, want: -1}, test_int16{fn: xor_int16_Neg32768, fnname: "xor_int16_Neg32768", in: 32767, want: -1}, test_int16{fn: xor_Neg32767_int16, fnname: "xor_Neg32767_int16", in: -32768, want: 1}, test_int16{fn: xor_int16_Neg32767, fnname: "xor_int16_Neg32767", in: -32768, want: 1}, test_int16{fn: xor_Neg32767_int16, fnname: "xor_Neg32767_int16", in: -32767, want: 0}, test_int16{fn: xor_int16_Neg32767, fnname: "xor_int16_Neg32767", in: -32767, want: 0}, test_int16{fn: xor_Neg32767_int16, fnname: "xor_Neg32767_int16", in: -1, want: 32766}, test_int16{fn: xor_int16_Neg32767, fnname: "xor_int16_Neg32767", in: -1, want: 32766}, test_int16{fn: xor_Neg32767_int16, fnname: "xor_Neg32767_int16", in: 0, want: -32767}, test_int16{fn: xor_int16_Neg32767, fnname: "xor_int16_Neg32767", in: 0, want: -32767}, test_int16{fn: xor_Neg32767_int16, fnname: "xor_Neg32767_int16", in: 1, want: -32768}, test_int16{fn: xor_int16_Neg32767, fnname: "xor_int16_Neg32767", in: 1, want: -32768}, test_int16{fn: xor_Neg32767_int16, fnname: "xor_Neg32767_int16", in: 32766, want: -1}, test_int16{fn: xor_int16_Neg32767, fnname: "xor_int16_Neg32767", in: 32766, want: -1}, test_int16{fn: xor_Neg32767_int16, fnname: "xor_Neg32767_int16", in: 32767, want: -2}, test_int16{fn: xor_int16_Neg32767, fnname: "xor_int16_Neg32767", in: 32767, want: -2}, test_int16{fn: xor_Neg1_int16, fnname: "xor_Neg1_int16", in: -32768, want: 32767}, test_int16{fn: xor_int16_Neg1, fnname: "xor_int16_Neg1", in: -32768, want: 32767}, test_int16{fn: xor_Neg1_int16, fnname: "xor_Neg1_int16", in: -32767, want: 32766}, test_int16{fn: xor_int16_Neg1, fnname: "xor_int16_Neg1", in: -32767, want: 32766}, test_int16{fn: xor_Neg1_int16, fnname: "xor_Neg1_int16", in: -1, want: 0}, test_int16{fn: xor_int16_Neg1, fnname: "xor_int16_Neg1", in: -1, want: 0}, test_int16{fn: xor_Neg1_int16, fnname: "xor_Neg1_int16", in: 0, want: -1}, test_int16{fn: xor_int16_Neg1, fnname: "xor_int16_Neg1", in: 0, want: -1}, test_int16{fn: xor_Neg1_int16, fnname: "xor_Neg1_int16", in: 1, want: -2}, test_int16{fn: xor_int16_Neg1, fnname: "xor_int16_Neg1", in: 1, want: -2}, test_int16{fn: xor_Neg1_int16, fnname: "xor_Neg1_int16", in: 32766, want: -32767}, test_int16{fn: xor_int16_Neg1, fnname: "xor_int16_Neg1", in: 32766, want: -32767}, test_int16{fn: xor_Neg1_int16, fnname: "xor_Neg1_int16", in: 32767, want: -32768}, test_int16{fn: xor_int16_Neg1, fnname: "xor_int16_Neg1", in: 32767, want: -32768}, test_int16{fn: xor_0_int16, fnname: "xor_0_int16", in: -32768, want: -32768}, test_int16{fn: xor_int16_0, fnname: "xor_int16_0", in: -32768, want: -32768}, test_int16{fn: xor_0_int16, fnname: "xor_0_int16", in: -32767, want: -32767}, test_int16{fn: xor_int16_0, fnname: "xor_int16_0", in: -32767, want: -32767}, test_int16{fn: xor_0_int16, fnname: "xor_0_int16", in: -1, want: -1}, test_int16{fn: xor_int16_0, fnname: "xor_int16_0", in: -1, want: -1}, test_int16{fn: xor_0_int16, fnname: "xor_0_int16", in: 0, want: 0}, test_int16{fn: xor_int16_0, fnname: "xor_int16_0", in: 0, want: 0}, test_int16{fn: xor_0_int16, fnname: "xor_0_int16", in: 1, want: 1}, test_int16{fn: xor_int16_0, fnname: "xor_int16_0", in: 1, want: 1}, test_int16{fn: xor_0_int16, fnname: "xor_0_int16", in: 32766, want: 32766}, test_int16{fn: xor_int16_0, fnname: "xor_int16_0", in: 32766, want: 32766}, test_int16{fn: xor_0_int16, fnname: "xor_0_int16", in: 32767, want: 32767}, test_int16{fn: xor_int16_0, fnname: "xor_int16_0", in: 32767, want: 32767}, test_int16{fn: xor_1_int16, fnname: "xor_1_int16", in: -32768, want: -32767}, test_int16{fn: xor_int16_1, fnname: "xor_int16_1", in: -32768, want: -32767}, test_int16{fn: xor_1_int16, fnname: "xor_1_int16", in: -32767, want: -32768}, test_int16{fn: xor_int16_1, fnname: "xor_int16_1", in: -32767, want: -32768}, test_int16{fn: xor_1_int16, fnname: "xor_1_int16", in: -1, want: -2}, test_int16{fn: xor_int16_1, fnname: "xor_int16_1", in: -1, want: -2}, test_int16{fn: xor_1_int16, fnname: "xor_1_int16", in: 0, want: 1}, test_int16{fn: xor_int16_1, fnname: "xor_int16_1", in: 0, want: 1}, test_int16{fn: xor_1_int16, fnname: "xor_1_int16", in: 1, want: 0}, test_int16{fn: xor_int16_1, fnname: "xor_int16_1", in: 1, want: 0}, test_int16{fn: xor_1_int16, fnname: "xor_1_int16", in: 32766, want: 32767}, test_int16{fn: xor_int16_1, fnname: "xor_int16_1", in: 32766, want: 32767}, test_int16{fn: xor_1_int16, fnname: "xor_1_int16", in: 32767, want: 32766}, test_int16{fn: xor_int16_1, fnname: "xor_int16_1", in: 32767, want: 32766}, test_int16{fn: xor_32766_int16, fnname: "xor_32766_int16", in: -32768, want: -2}, test_int16{fn: xor_int16_32766, fnname: "xor_int16_32766", in: -32768, want: -2}, test_int16{fn: xor_32766_int16, fnname: "xor_32766_int16", in: -32767, want: -1}, test_int16{fn: xor_int16_32766, fnname: "xor_int16_32766", in: -32767, want: -1}, test_int16{fn: xor_32766_int16, fnname: "xor_32766_int16", in: -1, want: -32767}, test_int16{fn: xor_int16_32766, fnname: "xor_int16_32766", in: -1, want: -32767}, test_int16{fn: xor_32766_int16, fnname: "xor_32766_int16", in: 0, want: 32766}, test_int16{fn: xor_int16_32766, fnname: "xor_int16_32766", in: 0, want: 32766}, test_int16{fn: xor_32766_int16, fnname: "xor_32766_int16", in: 1, want: 32767}, test_int16{fn: xor_int16_32766, fnname: "xor_int16_32766", in: 1, want: 32767}, test_int16{fn: xor_32766_int16, fnname: "xor_32766_int16", in: 32766, want: 0}, test_int16{fn: xor_int16_32766, fnname: "xor_int16_32766", in: 32766, want: 0}, test_int16{fn: xor_32766_int16, fnname: "xor_32766_int16", in: 32767, want: 1}, test_int16{fn: xor_int16_32766, fnname: "xor_int16_32766", in: 32767, want: 1}, test_int16{fn: xor_32767_int16, fnname: "xor_32767_int16", in: -32768, want: -1}, test_int16{fn: xor_int16_32767, fnname: "xor_int16_32767", in: -32768, want: -1}, test_int16{fn: xor_32767_int16, fnname: "xor_32767_int16", in: -32767, want: -2}, test_int16{fn: xor_int16_32767, fnname: "xor_int16_32767", in: -32767, want: -2}, test_int16{fn: xor_32767_int16, fnname: "xor_32767_int16", in: -1, want: -32768}, test_int16{fn: xor_int16_32767, fnname: "xor_int16_32767", in: -1, want: -32768}, test_int16{fn: xor_32767_int16, fnname: "xor_32767_int16", in: 0, want: 32767}, test_int16{fn: xor_int16_32767, fnname: "xor_int16_32767", in: 0, want: 32767}, test_int16{fn: xor_32767_int16, fnname: "xor_32767_int16", in: 1, want: 32766}, test_int16{fn: xor_int16_32767, fnname: "xor_int16_32767", in: 1, want: 32766}, test_int16{fn: xor_32767_int16, fnname: "xor_32767_int16", in: 32766, want: 1}, test_int16{fn: xor_int16_32767, fnname: "xor_int16_32767", in: 32766, want: 1}, test_int16{fn: xor_32767_int16, fnname: "xor_32767_int16", in: 32767, want: 0}, test_int16{fn: xor_int16_32767, fnname: "xor_int16_32767", in: 32767, want: 0}} type test_uint8 struct { fn func(uint8) uint8 fnname string in uint8 want uint8 } var tests_uint8 = []test_uint8{ test_uint8{fn: add_0_uint8, fnname: "add_0_uint8", in: 0, want: 0}, test_uint8{fn: add_uint8_0, fnname: "add_uint8_0", in: 0, want: 0}, test_uint8{fn: add_0_uint8, fnname: "add_0_uint8", in: 1, want: 1}, test_uint8{fn: add_uint8_0, fnname: "add_uint8_0", in: 1, want: 1}, test_uint8{fn: add_0_uint8, fnname: "add_0_uint8", in: 255, want: 255}, test_uint8{fn: add_uint8_0, fnname: "add_uint8_0", in: 255, want: 255}, test_uint8{fn: add_1_uint8, fnname: "add_1_uint8", in: 0, want: 1}, test_uint8{fn: add_uint8_1, fnname: "add_uint8_1", in: 0, want: 1}, test_uint8{fn: add_1_uint8, fnname: "add_1_uint8", in: 1, want: 2}, test_uint8{fn: add_uint8_1, fnname: "add_uint8_1", in: 1, want: 2}, test_uint8{fn: add_1_uint8, fnname: "add_1_uint8", in: 255, want: 0}, test_uint8{fn: add_uint8_1, fnname: "add_uint8_1", in: 255, want: 0}, test_uint8{fn: add_255_uint8, fnname: "add_255_uint8", in: 0, want: 255}, test_uint8{fn: add_uint8_255, fnname: "add_uint8_255", in: 0, want: 255}, test_uint8{fn: add_255_uint8, fnname: "add_255_uint8", in: 1, want: 0}, test_uint8{fn: add_uint8_255, fnname: "add_uint8_255", in: 1, want: 0}, test_uint8{fn: add_255_uint8, fnname: "add_255_uint8", in: 255, want: 254}, test_uint8{fn: add_uint8_255, fnname: "add_uint8_255", in: 255, want: 254}, test_uint8{fn: sub_0_uint8, fnname: "sub_0_uint8", in: 0, want: 0}, test_uint8{fn: sub_uint8_0, fnname: "sub_uint8_0", in: 0, want: 0}, test_uint8{fn: sub_0_uint8, fnname: "sub_0_uint8", in: 1, want: 255}, test_uint8{fn: sub_uint8_0, fnname: "sub_uint8_0", in: 1, want: 1}, test_uint8{fn: sub_0_uint8, fnname: "sub_0_uint8", in: 255, want: 1}, test_uint8{fn: sub_uint8_0, fnname: "sub_uint8_0", in: 255, want: 255}, test_uint8{fn: sub_1_uint8, fnname: "sub_1_uint8", in: 0, want: 1}, test_uint8{fn: sub_uint8_1, fnname: "sub_uint8_1", in: 0, want: 255}, test_uint8{fn: sub_1_uint8, fnname: "sub_1_uint8", in: 1, want: 0}, test_uint8{fn: sub_uint8_1, fnname: "sub_uint8_1", in: 1, want: 0}, test_uint8{fn: sub_1_uint8, fnname: "sub_1_uint8", in: 255, want: 2}, test_uint8{fn: sub_uint8_1, fnname: "sub_uint8_1", in: 255, want: 254}, test_uint8{fn: sub_255_uint8, fnname: "sub_255_uint8", in: 0, want: 255}, test_uint8{fn: sub_uint8_255, fnname: "sub_uint8_255", in: 0, want: 1}, test_uint8{fn: sub_255_uint8, fnname: "sub_255_uint8", in: 1, want: 254}, test_uint8{fn: sub_uint8_255, fnname: "sub_uint8_255", in: 1, want: 2}, test_uint8{fn: sub_255_uint8, fnname: "sub_255_uint8", in: 255, want: 0}, test_uint8{fn: sub_uint8_255, fnname: "sub_uint8_255", in: 255, want: 0}, test_uint8{fn: div_0_uint8, fnname: "div_0_uint8", in: 1, want: 0}, test_uint8{fn: div_0_uint8, fnname: "div_0_uint8", in: 255, want: 0}, test_uint8{fn: div_uint8_1, fnname: "div_uint8_1", in: 0, want: 0}, test_uint8{fn: div_1_uint8, fnname: "div_1_uint8", in: 1, want: 1}, test_uint8{fn: div_uint8_1, fnname: "div_uint8_1", in: 1, want: 1}, test_uint8{fn: div_1_uint8, fnname: "div_1_uint8", in: 255, want: 0}, test_uint8{fn: div_uint8_1, fnname: "div_uint8_1", in: 255, want: 255}, test_uint8{fn: div_uint8_255, fnname: "div_uint8_255", in: 0, want: 0}, test_uint8{fn: div_255_uint8, fnname: "div_255_uint8", in: 1, want: 255}, test_uint8{fn: div_uint8_255, fnname: "div_uint8_255", in: 1, want: 0}, test_uint8{fn: div_255_uint8, fnname: "div_255_uint8", in: 255, want: 1}, test_uint8{fn: div_uint8_255, fnname: "div_uint8_255", in: 255, want: 1}, test_uint8{fn: mul_0_uint8, fnname: "mul_0_uint8", in: 0, want: 0}, test_uint8{fn: mul_uint8_0, fnname: "mul_uint8_0", in: 0, want: 0}, test_uint8{fn: mul_0_uint8, fnname: "mul_0_uint8", in: 1, want: 0}, test_uint8{fn: mul_uint8_0, fnname: "mul_uint8_0", in: 1, want: 0}, test_uint8{fn: mul_0_uint8, fnname: "mul_0_uint8", in: 255, want: 0}, test_uint8{fn: mul_uint8_0, fnname: "mul_uint8_0", in: 255, want: 0}, test_uint8{fn: mul_1_uint8, fnname: "mul_1_uint8", in: 0, want: 0}, test_uint8{fn: mul_uint8_1, fnname: "mul_uint8_1", in: 0, want: 0}, test_uint8{fn: mul_1_uint8, fnname: "mul_1_uint8", in: 1, want: 1}, test_uint8{fn: mul_uint8_1, fnname: "mul_uint8_1", in: 1, want: 1}, test_uint8{fn: mul_1_uint8, fnname: "mul_1_uint8", in: 255, want: 255}, test_uint8{fn: mul_uint8_1, fnname: "mul_uint8_1", in: 255, want: 255}, test_uint8{fn: mul_255_uint8, fnname: "mul_255_uint8", in: 0, want: 0}, test_uint8{fn: mul_uint8_255, fnname: "mul_uint8_255", in: 0, want: 0}, test_uint8{fn: mul_255_uint8, fnname: "mul_255_uint8", in: 1, want: 255}, test_uint8{fn: mul_uint8_255, fnname: "mul_uint8_255", in: 1, want: 255}, test_uint8{fn: mul_255_uint8, fnname: "mul_255_uint8", in: 255, want: 1}, test_uint8{fn: mul_uint8_255, fnname: "mul_uint8_255", in: 255, want: 1}, test_uint8{fn: lsh_0_uint8, fnname: "lsh_0_uint8", in: 0, want: 0}, test_uint8{fn: lsh_uint8_0, fnname: "lsh_uint8_0", in: 0, want: 0}, test_uint8{fn: lsh_0_uint8, fnname: "lsh_0_uint8", in: 1, want: 0}, test_uint8{fn: lsh_uint8_0, fnname: "lsh_uint8_0", in: 1, want: 1}, test_uint8{fn: lsh_0_uint8, fnname: "lsh_0_uint8", in: 255, want: 0}, test_uint8{fn: lsh_uint8_0, fnname: "lsh_uint8_0", in: 255, want: 255}, test_uint8{fn: lsh_1_uint8, fnname: "lsh_1_uint8", in: 0, want: 1}, test_uint8{fn: lsh_uint8_1, fnname: "lsh_uint8_1", in: 0, want: 0}, test_uint8{fn: lsh_1_uint8, fnname: "lsh_1_uint8", in: 1, want: 2}, test_uint8{fn: lsh_uint8_1, fnname: "lsh_uint8_1", in: 1, want: 2}, test_uint8{fn: lsh_1_uint8, fnname: "lsh_1_uint8", in: 255, want: 0}, test_uint8{fn: lsh_uint8_1, fnname: "lsh_uint8_1", in: 255, want: 254}, test_uint8{fn: lsh_255_uint8, fnname: "lsh_255_uint8", in: 0, want: 255}, test_uint8{fn: lsh_uint8_255, fnname: "lsh_uint8_255", in: 0, want: 0}, test_uint8{fn: lsh_255_uint8, fnname: "lsh_255_uint8", in: 1, want: 254}, test_uint8{fn: lsh_uint8_255, fnname: "lsh_uint8_255", in: 1, want: 0}, test_uint8{fn: lsh_255_uint8, fnname: "lsh_255_uint8", in: 255, want: 0}, test_uint8{fn: lsh_uint8_255, fnname: "lsh_uint8_255", in: 255, want: 0}, test_uint8{fn: rsh_0_uint8, fnname: "rsh_0_uint8", in: 0, want: 0}, test_uint8{fn: rsh_uint8_0, fnname: "rsh_uint8_0", in: 0, want: 0}, test_uint8{fn: rsh_0_uint8, fnname: "rsh_0_uint8", in: 1, want: 0}, test_uint8{fn: rsh_uint8_0, fnname: "rsh_uint8_0", in: 1, want: 1}, test_uint8{fn: rsh_0_uint8, fnname: "rsh_0_uint8", in: 255, want: 0}, test_uint8{fn: rsh_uint8_0, fnname: "rsh_uint8_0", in: 255, want: 255}, test_uint8{fn: rsh_1_uint8, fnname: "rsh_1_uint8", in: 0, want: 1}, test_uint8{fn: rsh_uint8_1, fnname: "rsh_uint8_1", in: 0, want: 0}, test_uint8{fn: rsh_1_uint8, fnname: "rsh_1_uint8", in: 1, want: 0}, test_uint8{fn: rsh_uint8_1, fnname: "rsh_uint8_1", in: 1, want: 0}, test_uint8{fn: rsh_1_uint8, fnname: "rsh_1_uint8", in: 255, want: 0}, test_uint8{fn: rsh_uint8_1, fnname: "rsh_uint8_1", in: 255, want: 127}, test_uint8{fn: rsh_255_uint8, fnname: "rsh_255_uint8", in: 0, want: 255}, test_uint8{fn: rsh_uint8_255, fnname: "rsh_uint8_255", in: 0, want: 0}, test_uint8{fn: rsh_255_uint8, fnname: "rsh_255_uint8", in: 1, want: 127}, test_uint8{fn: rsh_uint8_255, fnname: "rsh_uint8_255", in: 1, want: 0}, test_uint8{fn: rsh_255_uint8, fnname: "rsh_255_uint8", in: 255, want: 0}, test_uint8{fn: rsh_uint8_255, fnname: "rsh_uint8_255", in: 255, want: 0}, test_uint8{fn: mod_0_uint8, fnname: "mod_0_uint8", in: 1, want: 0}, test_uint8{fn: mod_0_uint8, fnname: "mod_0_uint8", in: 255, want: 0}, test_uint8{fn: mod_uint8_1, fnname: "mod_uint8_1", in: 0, want: 0}, test_uint8{fn: mod_1_uint8, fnname: "mod_1_uint8", in: 1, want: 0}, test_uint8{fn: mod_uint8_1, fnname: "mod_uint8_1", in: 1, want: 0}, test_uint8{fn: mod_1_uint8, fnname: "mod_1_uint8", in: 255, want: 1}, test_uint8{fn: mod_uint8_1, fnname: "mod_uint8_1", in: 255, want: 0}, test_uint8{fn: mod_uint8_255, fnname: "mod_uint8_255", in: 0, want: 0}, test_uint8{fn: mod_255_uint8, fnname: "mod_255_uint8", in: 1, want: 0}, test_uint8{fn: mod_uint8_255, fnname: "mod_uint8_255", in: 1, want: 1}, test_uint8{fn: mod_255_uint8, fnname: "mod_255_uint8", in: 255, want: 0}, test_uint8{fn: mod_uint8_255, fnname: "mod_uint8_255", in: 255, want: 0}, test_uint8{fn: and_0_uint8, fnname: "and_0_uint8", in: 0, want: 0}, test_uint8{fn: and_uint8_0, fnname: "and_uint8_0", in: 0, want: 0}, test_uint8{fn: and_0_uint8, fnname: "and_0_uint8", in: 1, want: 0}, test_uint8{fn: and_uint8_0, fnname: "and_uint8_0", in: 1, want: 0}, test_uint8{fn: and_0_uint8, fnname: "and_0_uint8", in: 255, want: 0}, test_uint8{fn: and_uint8_0, fnname: "and_uint8_0", in: 255, want: 0}, test_uint8{fn: and_1_uint8, fnname: "and_1_uint8", in: 0, want: 0}, test_uint8{fn: and_uint8_1, fnname: "and_uint8_1", in: 0, want: 0}, test_uint8{fn: and_1_uint8, fnname: "and_1_uint8", in: 1, want: 1}, test_uint8{fn: and_uint8_1, fnname: "and_uint8_1", in: 1, want: 1}, test_uint8{fn: and_1_uint8, fnname: "and_1_uint8", in: 255, want: 1}, test_uint8{fn: and_uint8_1, fnname: "and_uint8_1", in: 255, want: 1}, test_uint8{fn: and_255_uint8, fnname: "and_255_uint8", in: 0, want: 0}, test_uint8{fn: and_uint8_255, fnname: "and_uint8_255", in: 0, want: 0}, test_uint8{fn: and_255_uint8, fnname: "and_255_uint8", in: 1, want: 1}, test_uint8{fn: and_uint8_255, fnname: "and_uint8_255", in: 1, want: 1}, test_uint8{fn: and_255_uint8, fnname: "and_255_uint8", in: 255, want: 255}, test_uint8{fn: and_uint8_255, fnname: "and_uint8_255", in: 255, want: 255}, test_uint8{fn: or_0_uint8, fnname: "or_0_uint8", in: 0, want: 0}, test_uint8{fn: or_uint8_0, fnname: "or_uint8_0", in: 0, want: 0}, test_uint8{fn: or_0_uint8, fnname: "or_0_uint8", in: 1, want: 1}, test_uint8{fn: or_uint8_0, fnname: "or_uint8_0", in: 1, want: 1}, test_uint8{fn: or_0_uint8, fnname: "or_0_uint8", in: 255, want: 255}, test_uint8{fn: or_uint8_0, fnname: "or_uint8_0", in: 255, want: 255}, test_uint8{fn: or_1_uint8, fnname: "or_1_uint8", in: 0, want: 1}, test_uint8{fn: or_uint8_1, fnname: "or_uint8_1", in: 0, want: 1}, test_uint8{fn: or_1_uint8, fnname: "or_1_uint8", in: 1, want: 1}, test_uint8{fn: or_uint8_1, fnname: "or_uint8_1", in: 1, want: 1}, test_uint8{fn: or_1_uint8, fnname: "or_1_uint8", in: 255, want: 255}, test_uint8{fn: or_uint8_1, fnname: "or_uint8_1", in: 255, want: 255}, test_uint8{fn: or_255_uint8, fnname: "or_255_uint8", in: 0, want: 255}, test_uint8{fn: or_uint8_255, fnname: "or_uint8_255", in: 0, want: 255}, test_uint8{fn: or_255_uint8, fnname: "or_255_uint8", in: 1, want: 255}, test_uint8{fn: or_uint8_255, fnname: "or_uint8_255", in: 1, want: 255}, test_uint8{fn: or_255_uint8, fnname: "or_255_uint8", in: 255, want: 255}, test_uint8{fn: or_uint8_255, fnname: "or_uint8_255", in: 255, want: 255}, test_uint8{fn: xor_0_uint8, fnname: "xor_0_uint8", in: 0, want: 0}, test_uint8{fn: xor_uint8_0, fnname: "xor_uint8_0", in: 0, want: 0}, test_uint8{fn: xor_0_uint8, fnname: "xor_0_uint8", in: 1, want: 1}, test_uint8{fn: xor_uint8_0, fnname: "xor_uint8_0", in: 1, want: 1}, test_uint8{fn: xor_0_uint8, fnname: "xor_0_uint8", in: 255, want: 255}, test_uint8{fn: xor_uint8_0, fnname: "xor_uint8_0", in: 255, want: 255}, test_uint8{fn: xor_1_uint8, fnname: "xor_1_uint8", in: 0, want: 1}, test_uint8{fn: xor_uint8_1, fnname: "xor_uint8_1", in: 0, want: 1}, test_uint8{fn: xor_1_uint8, fnname: "xor_1_uint8", in: 1, want: 0}, test_uint8{fn: xor_uint8_1, fnname: "xor_uint8_1", in: 1, want: 0}, test_uint8{fn: xor_1_uint8, fnname: "xor_1_uint8", in: 255, want: 254}, test_uint8{fn: xor_uint8_1, fnname: "xor_uint8_1", in: 255, want: 254}, test_uint8{fn: xor_255_uint8, fnname: "xor_255_uint8", in: 0, want: 255}, test_uint8{fn: xor_uint8_255, fnname: "xor_uint8_255", in: 0, want: 255}, test_uint8{fn: xor_255_uint8, fnname: "xor_255_uint8", in: 1, want: 254}, test_uint8{fn: xor_uint8_255, fnname: "xor_uint8_255", in: 1, want: 254}, test_uint8{fn: xor_255_uint8, fnname: "xor_255_uint8", in: 255, want: 0}, test_uint8{fn: xor_uint8_255, fnname: "xor_uint8_255", in: 255, want: 0}} type test_int8 struct { fn func(int8) int8 fnname string in int8 want int8 } var tests_int8 = []test_int8{ test_int8{fn: add_Neg128_int8, fnname: "add_Neg128_int8", in: -128, want: 0}, test_int8{fn: add_int8_Neg128, fnname: "add_int8_Neg128", in: -128, want: 0}, test_int8{fn: add_Neg128_int8, fnname: "add_Neg128_int8", in: -127, want: 1}, test_int8{fn: add_int8_Neg128, fnname: "add_int8_Neg128", in: -127, want: 1}, test_int8{fn: add_Neg128_int8, fnname: "add_Neg128_int8", in: -1, want: 127}, test_int8{fn: add_int8_Neg128, fnname: "add_int8_Neg128", in: -1, want: 127}, test_int8{fn: add_Neg128_int8, fnname: "add_Neg128_int8", in: 0, want: -128}, test_int8{fn: add_int8_Neg128, fnname: "add_int8_Neg128", in: 0, want: -128}, test_int8{fn: add_Neg128_int8, fnname: "add_Neg128_int8", in: 1, want: -127}, test_int8{fn: add_int8_Neg128, fnname: "add_int8_Neg128", in: 1, want: -127}, test_int8{fn: add_Neg128_int8, fnname: "add_Neg128_int8", in: 126, want: -2}, test_int8{fn: add_int8_Neg128, fnname: "add_int8_Neg128", in: 126, want: -2}, test_int8{fn: add_Neg128_int8, fnname: "add_Neg128_int8", in: 127, want: -1}, test_int8{fn: add_int8_Neg128, fnname: "add_int8_Neg128", in: 127, want: -1}, test_int8{fn: add_Neg127_int8, fnname: "add_Neg127_int8", in: -128, want: 1}, test_int8{fn: add_int8_Neg127, fnname: "add_int8_Neg127", in: -128, want: 1}, test_int8{fn: add_Neg127_int8, fnname: "add_Neg127_int8", in: -127, want: 2}, test_int8{fn: add_int8_Neg127, fnname: "add_int8_Neg127", in: -127, want: 2}, test_int8{fn: add_Neg127_int8, fnname: "add_Neg127_int8", in: -1, want: -128}, test_int8{fn: add_int8_Neg127, fnname: "add_int8_Neg127", in: -1, want: -128}, test_int8{fn: add_Neg127_int8, fnname: "add_Neg127_int8", in: 0, want: -127}, test_int8{fn: add_int8_Neg127, fnname: "add_int8_Neg127", in: 0, want: -127}, test_int8{fn: add_Neg127_int8, fnname: "add_Neg127_int8", in: 1, want: -126}, test_int8{fn: add_int8_Neg127, fnname: "add_int8_Neg127", in: 1, want: -126}, test_int8{fn: add_Neg127_int8, fnname: "add_Neg127_int8", in: 126, want: -1}, test_int8{fn: add_int8_Neg127, fnname: "add_int8_Neg127", in: 126, want: -1}, test_int8{fn: add_Neg127_int8, fnname: "add_Neg127_int8", in: 127, want: 0}, test_int8{fn: add_int8_Neg127, fnname: "add_int8_Neg127", in: 127, want: 0}, test_int8{fn: add_Neg1_int8, fnname: "add_Neg1_int8", in: -128, want: 127}, test_int8{fn: add_int8_Neg1, fnname: "add_int8_Neg1", in: -128, want: 127}, test_int8{fn: add_Neg1_int8, fnname: "add_Neg1_int8", in: -127, want: -128}, test_int8{fn: add_int8_Neg1, fnname: "add_int8_Neg1", in: -127, want: -128}, test_int8{fn: add_Neg1_int8, fnname: "add_Neg1_int8", in: -1, want: -2}, test_int8{fn: add_int8_Neg1, fnname: "add_int8_Neg1", in: -1, want: -2}, test_int8{fn: add_Neg1_int8, fnname: "add_Neg1_int8", in: 0, want: -1}, test_int8{fn: add_int8_Neg1, fnname: "add_int8_Neg1", in: 0, want: -1}, test_int8{fn: add_Neg1_int8, fnname: "add_Neg1_int8", in: 1, want: 0}, test_int8{fn: add_int8_Neg1, fnname: "add_int8_Neg1", in: 1, want: 0}, test_int8{fn: add_Neg1_int8, fnname: "add_Neg1_int8", in: 126, want: 125}, test_int8{fn: add_int8_Neg1, fnname: "add_int8_Neg1", in: 126, want: 125}, test_int8{fn: add_Neg1_int8, fnname: "add_Neg1_int8", in: 127, want: 126}, test_int8{fn: add_int8_Neg1, fnname: "add_int8_Neg1", in: 127, want: 126}, test_int8{fn: add_0_int8, fnname: "add_0_int8", in: -128, want: -128}, test_int8{fn: add_int8_0, fnname: "add_int8_0", in: -128, want: -128}, test_int8{fn: add_0_int8, fnname: "add_0_int8", in: -127, want: -127}, test_int8{fn: add_int8_0, fnname: "add_int8_0", in: -127, want: -127}, test_int8{fn: add_0_int8, fnname: "add_0_int8", in: -1, want: -1}, test_int8{fn: add_int8_0, fnname: "add_int8_0", in: -1, want: -1}, test_int8{fn: add_0_int8, fnname: "add_0_int8", in: 0, want: 0}, test_int8{fn: add_int8_0, fnname: "add_int8_0", in: 0, want: 0}, test_int8{fn: add_0_int8, fnname: "add_0_int8", in: 1, want: 1}, test_int8{fn: add_int8_0, fnname: "add_int8_0", in: 1, want: 1}, test_int8{fn: add_0_int8, fnname: "add_0_int8", in: 126, want: 126}, test_int8{fn: add_int8_0, fnname: "add_int8_0", in: 126, want: 126}, test_int8{fn: add_0_int8, fnname: "add_0_int8", in: 127, want: 127}, test_int8{fn: add_int8_0, fnname: "add_int8_0", in: 127, want: 127}, test_int8{fn: add_1_int8, fnname: "add_1_int8", in: -128, want: -127}, test_int8{fn: add_int8_1, fnname: "add_int8_1", in: -128, want: -127}, test_int8{fn: add_1_int8, fnname: "add_1_int8", in: -127, want: -126}, test_int8{fn: add_int8_1, fnname: "add_int8_1", in: -127, want: -126}, test_int8{fn: add_1_int8, fnname: "add_1_int8", in: -1, want: 0}, test_int8{fn: add_int8_1, fnname: "add_int8_1", in: -1, want: 0}, test_int8{fn: add_1_int8, fnname: "add_1_int8", in: 0, want: 1}, test_int8{fn: add_int8_1, fnname: "add_int8_1", in: 0, want: 1}, test_int8{fn: add_1_int8, fnname: "add_1_int8", in: 1, want: 2}, test_int8{fn: add_int8_1, fnname: "add_int8_1", in: 1, want: 2}, test_int8{fn: add_1_int8, fnname: "add_1_int8", in: 126, want: 127}, test_int8{fn: add_int8_1, fnname: "add_int8_1", in: 126, want: 127}, test_int8{fn: add_1_int8, fnname: "add_1_int8", in: 127, want: -128}, test_int8{fn: add_int8_1, fnname: "add_int8_1", in: 127, want: -128}, test_int8{fn: add_126_int8, fnname: "add_126_int8", in: -128, want: -2}, test_int8{fn: add_int8_126, fnname: "add_int8_126", in: -128, want: -2}, test_int8{fn: add_126_int8, fnname: "add_126_int8", in: -127, want: -1}, test_int8{fn: add_int8_126, fnname: "add_int8_126", in: -127, want: -1}, test_int8{fn: add_126_int8, fnname: "add_126_int8", in: -1, want: 125}, test_int8{fn: add_int8_126, fnname: "add_int8_126", in: -1, want: 125}, test_int8{fn: add_126_int8, fnname: "add_126_int8", in: 0, want: 126}, test_int8{fn: add_int8_126, fnname: "add_int8_126", in: 0, want: 126}, test_int8{fn: add_126_int8, fnname: "add_126_int8", in: 1, want: 127}, test_int8{fn: add_int8_126, fnname: "add_int8_126", in: 1, want: 127}, test_int8{fn: add_126_int8, fnname: "add_126_int8", in: 126, want: -4}, test_int8{fn: add_int8_126, fnname: "add_int8_126", in: 126, want: -4}, test_int8{fn: add_126_int8, fnname: "add_126_int8", in: 127, want: -3}, test_int8{fn: add_int8_126, fnname: "add_int8_126", in: 127, want: -3}, test_int8{fn: add_127_int8, fnname: "add_127_int8", in: -128, want: -1}, test_int8{fn: add_int8_127, fnname: "add_int8_127", in: -128, want: -1}, test_int8{fn: add_127_int8, fnname: "add_127_int8", in: -127, want: 0}, test_int8{fn: add_int8_127, fnname: "add_int8_127", in: -127, want: 0}, test_int8{fn: add_127_int8, fnname: "add_127_int8", in: -1, want: 126}, test_int8{fn: add_int8_127, fnname: "add_int8_127", in: -1, want: 126}, test_int8{fn: add_127_int8, fnname: "add_127_int8", in: 0, want: 127}, test_int8{fn: add_int8_127, fnname: "add_int8_127", in: 0, want: 127}, test_int8{fn: add_127_int8, fnname: "add_127_int8", in: 1, want: -128}, test_int8{fn: add_int8_127, fnname: "add_int8_127", in: 1, want: -128}, test_int8{fn: add_127_int8, fnname: "add_127_int8", in: 126, want: -3}, test_int8{fn: add_int8_127, fnname: "add_int8_127", in: 126, want: -3}, test_int8{fn: add_127_int8, fnname: "add_127_int8", in: 127, want: -2}, test_int8{fn: add_int8_127, fnname: "add_int8_127", in: 127, want: -2}, test_int8{fn: sub_Neg128_int8, fnname: "sub_Neg128_int8", in: -128, want: 0}, test_int8{fn: sub_int8_Neg128, fnname: "sub_int8_Neg128", in: -128, want: 0}, test_int8{fn: sub_Neg128_int8, fnname: "sub_Neg128_int8", in: -127, want: -1}, test_int8{fn: sub_int8_Neg128, fnname: "sub_int8_Neg128", in: -127, want: 1}, test_int8{fn: sub_Neg128_int8, fnname: "sub_Neg128_int8", in: -1, want: -127}, test_int8{fn: sub_int8_Neg128, fnname: "sub_int8_Neg128", in: -1, want: 127}, test_int8{fn: sub_Neg128_int8, fnname: "sub_Neg128_int8", in: 0, want: -128}, test_int8{fn: sub_int8_Neg128, fnname: "sub_int8_Neg128", in: 0, want: -128}, test_int8{fn: sub_Neg128_int8, fnname: "sub_Neg128_int8", in: 1, want: 127}, test_int8{fn: sub_int8_Neg128, fnname: "sub_int8_Neg128", in: 1, want: -127}, test_int8{fn: sub_Neg128_int8, fnname: "sub_Neg128_int8", in: 126, want: 2}, test_int8{fn: sub_int8_Neg128, fnname: "sub_int8_Neg128", in: 126, want: -2}, test_int8{fn: sub_Neg128_int8, fnname: "sub_Neg128_int8", in: 127, want: 1}, test_int8{fn: sub_int8_Neg128, fnname: "sub_int8_Neg128", in: 127, want: -1}, test_int8{fn: sub_Neg127_int8, fnname: "sub_Neg127_int8", in: -128, want: 1}, test_int8{fn: sub_int8_Neg127, fnname: "sub_int8_Neg127", in: -128, want: -1}, test_int8{fn: sub_Neg127_int8, fnname: "sub_Neg127_int8", in: -127, want: 0}, test_int8{fn: sub_int8_Neg127, fnname: "sub_int8_Neg127", in: -127, want: 0}, test_int8{fn: sub_Neg127_int8, fnname: "sub_Neg127_int8", in: -1, want: -126}, test_int8{fn: sub_int8_Neg127, fnname: "sub_int8_Neg127", in: -1, want: 126}, test_int8{fn: sub_Neg127_int8, fnname: "sub_Neg127_int8", in: 0, want: -127}, test_int8{fn: sub_int8_Neg127, fnname: "sub_int8_Neg127", in: 0, want: 127}, test_int8{fn: sub_Neg127_int8, fnname: "sub_Neg127_int8", in: 1, want: -128}, test_int8{fn: sub_int8_Neg127, fnname: "sub_int8_Neg127", in: 1, want: -128}, test_int8{fn: sub_Neg127_int8, fnname: "sub_Neg127_int8", in: 126, want: 3}, test_int8{fn: sub_int8_Neg127, fnname: "sub_int8_Neg127", in: 126, want: -3}, test_int8{fn: sub_Neg127_int8, fnname: "sub_Neg127_int8", in: 127, want: 2}, test_int8{fn: sub_int8_Neg127, fnname: "sub_int8_Neg127", in: 127, want: -2}, test_int8{fn: sub_Neg1_int8, fnname: "sub_Neg1_int8", in: -128, want: 127}, test_int8{fn: sub_int8_Neg1, fnname: "sub_int8_Neg1", in: -128, want: -127}, test_int8{fn: sub_Neg1_int8, fnname: "sub_Neg1_int8", in: -127, want: 126}, test_int8{fn: sub_int8_Neg1, fnname: "sub_int8_Neg1", in: -127, want: -126}, test_int8{fn: sub_Neg1_int8, fnname: "sub_Neg1_int8", in: -1, want: 0}, test_int8{fn: sub_int8_Neg1, fnname: "sub_int8_Neg1", in: -1, want: 0}, test_int8{fn: sub_Neg1_int8, fnname: "sub_Neg1_int8", in: 0, want: -1}, test_int8{fn: sub_int8_Neg1, fnname: "sub_int8_Neg1", in: 0, want: 1}, test_int8{fn: sub_Neg1_int8, fnname: "sub_Neg1_int8", in: 1, want: -2}, test_int8{fn: sub_int8_Neg1, fnname: "sub_int8_Neg1", in: 1, want: 2}, test_int8{fn: sub_Neg1_int8, fnname: "sub_Neg1_int8", in: 126, want: -127}, test_int8{fn: sub_int8_Neg1, fnname: "sub_int8_Neg1", in: 126, want: 127}, test_int8{fn: sub_Neg1_int8, fnname: "sub_Neg1_int8", in: 127, want: -128}, test_int8{fn: sub_int8_Neg1, fnname: "sub_int8_Neg1", in: 127, want: -128}, test_int8{fn: sub_0_int8, fnname: "sub_0_int8", in: -128, want: -128}, test_int8{fn: sub_int8_0, fnname: "sub_int8_0", in: -128, want: -128}, test_int8{fn: sub_0_int8, fnname: "sub_0_int8", in: -127, want: 127}, test_int8{fn: sub_int8_0, fnname: "sub_int8_0", in: -127, want: -127}, test_int8{fn: sub_0_int8, fnname: "sub_0_int8", in: -1, want: 1}, test_int8{fn: sub_int8_0, fnname: "sub_int8_0", in: -1, want: -1}, test_int8{fn: sub_0_int8, fnname: "sub_0_int8", in: 0, want: 0}, test_int8{fn: sub_int8_0, fnname: "sub_int8_0", in: 0, want: 0}, test_int8{fn: sub_0_int8, fnname: "sub_0_int8", in: 1, want: -1}, test_int8{fn: sub_int8_0, fnname: "sub_int8_0", in: 1, want: 1}, test_int8{fn: sub_0_int8, fnname: "sub_0_int8", in: 126, want: -126}, test_int8{fn: sub_int8_0, fnname: "sub_int8_0", in: 126, want: 126}, test_int8{fn: sub_0_int8, fnname: "sub_0_int8", in: 127, want: -127}, test_int8{fn: sub_int8_0, fnname: "sub_int8_0", in: 127, want: 127}, test_int8{fn: sub_1_int8, fnname: "sub_1_int8", in: -128, want: -127}, test_int8{fn: sub_int8_1, fnname: "sub_int8_1", in: -128, want: 127}, test_int8{fn: sub_1_int8, fnname: "sub_1_int8", in: -127, want: -128}, test_int8{fn: sub_int8_1, fnname: "sub_int8_1", in: -127, want: -128}, test_int8{fn: sub_1_int8, fnname: "sub_1_int8", in: -1, want: 2}, test_int8{fn: sub_int8_1, fnname: "sub_int8_1", in: -1, want: -2}, test_int8{fn: sub_1_int8, fnname: "sub_1_int8", in: 0, want: 1}, test_int8{fn: sub_int8_1, fnname: "sub_int8_1", in: 0, want: -1}, test_int8{fn: sub_1_int8, fnname: "sub_1_int8", in: 1, want: 0}, test_int8{fn: sub_int8_1, fnname: "sub_int8_1", in: 1, want: 0}, test_int8{fn: sub_1_int8, fnname: "sub_1_int8", in: 126, want: -125}, test_int8{fn: sub_int8_1, fnname: "sub_int8_1", in: 126, want: 125}, test_int8{fn: sub_1_int8, fnname: "sub_1_int8", in: 127, want: -126}, test_int8{fn: sub_int8_1, fnname: "sub_int8_1", in: 127, want: 126}, test_int8{fn: sub_126_int8, fnname: "sub_126_int8", in: -128, want: -2}, test_int8{fn: sub_int8_126, fnname: "sub_int8_126", in: -128, want: 2}, test_int8{fn: sub_126_int8, fnname: "sub_126_int8", in: -127, want: -3}, test_int8{fn: sub_int8_126, fnname: "sub_int8_126", in: -127, want: 3}, test_int8{fn: sub_126_int8, fnname: "sub_126_int8", in: -1, want: 127}, test_int8{fn: sub_int8_126, fnname: "sub_int8_126", in: -1, want: -127}, test_int8{fn: sub_126_int8, fnname: "sub_126_int8", in: 0, want: 126}, test_int8{fn: sub_int8_126, fnname: "sub_int8_126", in: 0, want: -126}, test_int8{fn: sub_126_int8, fnname: "sub_126_int8", in: 1, want: 125}, test_int8{fn: sub_int8_126, fnname: "sub_int8_126", in: 1, want: -125}, test_int8{fn: sub_126_int8, fnname: "sub_126_int8", in: 126, want: 0}, test_int8{fn: sub_int8_126, fnname: "sub_int8_126", in: 126, want: 0}, test_int8{fn: sub_126_int8, fnname: "sub_126_int8", in: 127, want: -1}, test_int8{fn: sub_int8_126, fnname: "sub_int8_126", in: 127, want: 1}, test_int8{fn: sub_127_int8, fnname: "sub_127_int8", in: -128, want: -1}, test_int8{fn: sub_int8_127, fnname: "sub_int8_127", in: -128, want: 1}, test_int8{fn: sub_127_int8, fnname: "sub_127_int8", in: -127, want: -2}, test_int8{fn: sub_int8_127, fnname: "sub_int8_127", in: -127, want: 2}, test_int8{fn: sub_127_int8, fnname: "sub_127_int8", in: -1, want: -128}, test_int8{fn: sub_int8_127, fnname: "sub_int8_127", in: -1, want: -128}, test_int8{fn: sub_127_int8, fnname: "sub_127_int8", in: 0, want: 127}, test_int8{fn: sub_int8_127, fnname: "sub_int8_127", in: 0, want: -127}, test_int8{fn: sub_127_int8, fnname: "sub_127_int8", in: 1, want: 126}, test_int8{fn: sub_int8_127, fnname: "sub_int8_127", in: 1, want: -126}, test_int8{fn: sub_127_int8, fnname: "sub_127_int8", in: 126, want: 1}, test_int8{fn: sub_int8_127, fnname: "sub_int8_127", in: 126, want: -1}, test_int8{fn: sub_127_int8, fnname: "sub_127_int8", in: 127, want: 0}, test_int8{fn: sub_int8_127, fnname: "sub_int8_127", in: 127, want: 0}, test_int8{fn: div_Neg128_int8, fnname: "div_Neg128_int8", in: -128, want: 1}, test_int8{fn: div_int8_Neg128, fnname: "div_int8_Neg128", in: -128, want: 1}, test_int8{fn: div_Neg128_int8, fnname: "div_Neg128_int8", in: -127, want: 1}, test_int8{fn: div_int8_Neg128, fnname: "div_int8_Neg128", in: -127, want: 0}, test_int8{fn: div_Neg128_int8, fnname: "div_Neg128_int8", in: -1, want: -128}, test_int8{fn: div_int8_Neg128, fnname: "div_int8_Neg128", in: -1, want: 0}, test_int8{fn: div_int8_Neg128, fnname: "div_int8_Neg128", in: 0, want: 0}, test_int8{fn: div_Neg128_int8, fnname: "div_Neg128_int8", in: 1, want: -128}, test_int8{fn: div_int8_Neg128, fnname: "div_int8_Neg128", in: 1, want: 0}, test_int8{fn: div_Neg128_int8, fnname: "div_Neg128_int8", in: 126, want: -1}, test_int8{fn: div_int8_Neg128, fnname: "div_int8_Neg128", in: 126, want: 0}, test_int8{fn: div_Neg128_int8, fnname: "div_Neg128_int8", in: 127, want: -1}, test_int8{fn: div_int8_Neg128, fnname: "div_int8_Neg128", in: 127, want: 0}, test_int8{fn: div_Neg127_int8, fnname: "div_Neg127_int8", in: -128, want: 0}, test_int8{fn: div_int8_Neg127, fnname: "div_int8_Neg127", in: -128, want: 1}, test_int8{fn: div_Neg127_int8, fnname: "div_Neg127_int8", in: -127, want: 1}, test_int8{fn: div_int8_Neg127, fnname: "div_int8_Neg127", in: -127, want: 1}, test_int8{fn: div_Neg127_int8, fnname: "div_Neg127_int8", in: -1, want: 127}, test_int8{fn: div_int8_Neg127, fnname: "div_int8_Neg127", in: -1, want: 0}, test_int8{fn: div_int8_Neg127, fnname: "div_int8_Neg127", in: 0, want: 0}, test_int8{fn: div_Neg127_int8, fnname: "div_Neg127_int8", in: 1, want: -127}, test_int8{fn: div_int8_Neg127, fnname: "div_int8_Neg127", in: 1, want: 0}, test_int8{fn: div_Neg127_int8, fnname: "div_Neg127_int8", in: 126, want: -1}, test_int8{fn: div_int8_Neg127, fnname: "div_int8_Neg127", in: 126, want: 0}, test_int8{fn: div_Neg127_int8, fnname: "div_Neg127_int8", in: 127, want: -1}, test_int8{fn: div_int8_Neg127, fnname: "div_int8_Neg127", in: 127, want: -1}, test_int8{fn: div_Neg1_int8, fnname: "div_Neg1_int8", in: -128, want: 0}, test_int8{fn: div_int8_Neg1, fnname: "div_int8_Neg1", in: -128, want: -128}, test_int8{fn: div_Neg1_int8, fnname: "div_Neg1_int8", in: -127, want: 0}, test_int8{fn: div_int8_Neg1, fnname: "div_int8_Neg1", in: -127, want: 127}, test_int8{fn: div_Neg1_int8, fnname: "div_Neg1_int8", in: -1, want: 1}, test_int8{fn: div_int8_Neg1, fnname: "div_int8_Neg1", in: -1, want: 1}, test_int8{fn: div_int8_Neg1, fnname: "div_int8_Neg1", in: 0, want: 0}, test_int8{fn: div_Neg1_int8, fnname: "div_Neg1_int8", in: 1, want: -1}, test_int8{fn: div_int8_Neg1, fnname: "div_int8_Neg1", in: 1, want: -1}, test_int8{fn: div_Neg1_int8, fnname: "div_Neg1_int8", in: 126, want: 0}, test_int8{fn: div_int8_Neg1, fnname: "div_int8_Neg1", in: 126, want: -126}, test_int8{fn: div_Neg1_int8, fnname: "div_Neg1_int8", in: 127, want: 0}, test_int8{fn: div_int8_Neg1, fnname: "div_int8_Neg1", in: 127, want: -127}, test_int8{fn: div_0_int8, fnname: "div_0_int8", in: -128, want: 0}, test_int8{fn: div_0_int8, fnname: "div_0_int8", in: -127, want: 0}, test_int8{fn: div_0_int8, fnname: "div_0_int8", in: -1, want: 0}, test_int8{fn: div_0_int8, fnname: "div_0_int8", in: 1, want: 0}, test_int8{fn: div_0_int8, fnname: "div_0_int8", in: 126, want: 0}, test_int8{fn: div_0_int8, fnname: "div_0_int8", in: 127, want: 0}, test_int8{fn: div_1_int8, fnname: "div_1_int8", in: -128, want: 0}, test_int8{fn: div_int8_1, fnname: "div_int8_1", in: -128, want: -128}, test_int8{fn: div_1_int8, fnname: "div_1_int8", in: -127, want: 0}, test_int8{fn: div_int8_1, fnname: "div_int8_1", in: -127, want: -127}, test_int8{fn: div_1_int8, fnname: "div_1_int8", in: -1, want: -1}, test_int8{fn: div_int8_1, fnname: "div_int8_1", in: -1, want: -1}, test_int8{fn: div_int8_1, fnname: "div_int8_1", in: 0, want: 0}, test_int8{fn: div_1_int8, fnname: "div_1_int8", in: 1, want: 1}, test_int8{fn: div_int8_1, fnname: "div_int8_1", in: 1, want: 1}, test_int8{fn: div_1_int8, fnname: "div_1_int8", in: 126, want: 0}, test_int8{fn: div_int8_1, fnname: "div_int8_1", in: 126, want: 126}, test_int8{fn: div_1_int8, fnname: "div_1_int8", in: 127, want: 0}, test_int8{fn: div_int8_1, fnname: "div_int8_1", in: 127, want: 127}, test_int8{fn: div_126_int8, fnname: "div_126_int8", in: -128, want: 0}, test_int8{fn: div_int8_126, fnname: "div_int8_126", in: -128, want: -1}, test_int8{fn: div_126_int8, fnname: "div_126_int8", in: -127, want: 0}, test_int8{fn: div_int8_126, fnname: "div_int8_126", in: -127, want: -1}, test_int8{fn: div_126_int8, fnname: "div_126_int8", in: -1, want: -126}, test_int8{fn: div_int8_126, fnname: "div_int8_126", in: -1, want: 0}, test_int8{fn: div_int8_126, fnname: "div_int8_126", in: 0, want: 0}, test_int8{fn: div_126_int8, fnname: "div_126_int8", in: 1, want: 126}, test_int8{fn: div_int8_126, fnname: "div_int8_126", in: 1, want: 0}, test_int8{fn: div_126_int8, fnname: "div_126_int8", in: 126, want: 1}, test_int8{fn: div_int8_126, fnname: "div_int8_126", in: 126, want: 1}, test_int8{fn: div_126_int8, fnname: "div_126_int8", in: 127, want: 0}, test_int8{fn: div_int8_126, fnname: "div_int8_126", in: 127, want: 1}, test_int8{fn: div_127_int8, fnname: "div_127_int8", in: -128, want: 0}, test_int8{fn: div_int8_127, fnname: "div_int8_127", in: -128, want: -1}, test_int8{fn: div_127_int8, fnname: "div_127_int8", in: -127, want: -1}, test_int8{fn: div_int8_127, fnname: "div_int8_127", in: -127, want: -1}, test_int8{fn: div_127_int8, fnname: "div_127_int8", in: -1, want: -127}, test_int8{fn: div_int8_127, fnname: "div_int8_127", in: -1, want: 0}, test_int8{fn: div_int8_127, fnname: "div_int8_127", in: 0, want: 0}, test_int8{fn: div_127_int8, fnname: "div_127_int8", in: 1, want: 127}, test_int8{fn: div_int8_127, fnname: "div_int8_127", in: 1, want: 0}, test_int8{fn: div_127_int8, fnname: "div_127_int8", in: 126, want: 1}, test_int8{fn: div_int8_127, fnname: "div_int8_127", in: 126, want: 0}, test_int8{fn: div_127_int8, fnname: "div_127_int8", in: 127, want: 1}, test_int8{fn: div_int8_127, fnname: "div_int8_127", in: 127, want: 1}, test_int8{fn: mul_Neg128_int8, fnname: "mul_Neg128_int8", in: -128, want: 0}, test_int8{fn: mul_int8_Neg128, fnname: "mul_int8_Neg128", in: -128, want: 0}, test_int8{fn: mul_Neg128_int8, fnname: "mul_Neg128_int8", in: -127, want: -128}, test_int8{fn: mul_int8_Neg128, fnname: "mul_int8_Neg128", in: -127, want: -128}, test_int8{fn: mul_Neg128_int8, fnname: "mul_Neg128_int8", in: -1, want: -128}, test_int8{fn: mul_int8_Neg128, fnname: "mul_int8_Neg128", in: -1, want: -128}, test_int8{fn: mul_Neg128_int8, fnname: "mul_Neg128_int8", in: 0, want: 0}, test_int8{fn: mul_int8_Neg128, fnname: "mul_int8_Neg128", in: 0, want: 0}, test_int8{fn: mul_Neg128_int8, fnname: "mul_Neg128_int8", in: 1, want: -128}, test_int8{fn: mul_int8_Neg128, fnname: "mul_int8_Neg128", in: 1, want: -128}, test_int8{fn: mul_Neg128_int8, fnname: "mul_Neg128_int8", in: 126, want: 0}, test_int8{fn: mul_int8_Neg128, fnname: "mul_int8_Neg128", in: 126, want: 0}, test_int8{fn: mul_Neg128_int8, fnname: "mul_Neg128_int8", in: 127, want: -128}, test_int8{fn: mul_int8_Neg128, fnname: "mul_int8_Neg128", in: 127, want: -128}, test_int8{fn: mul_Neg127_int8, fnname: "mul_Neg127_int8", in: -128, want: -128}, test_int8{fn: mul_int8_Neg127, fnname: "mul_int8_Neg127", in: -128, want: -128}, test_int8{fn: mul_Neg127_int8, fnname: "mul_Neg127_int8", in: -127, want: 1}, test_int8{fn: mul_int8_Neg127, fnname: "mul_int8_Neg127", in: -127, want: 1}, test_int8{fn: mul_Neg127_int8, fnname: "mul_Neg127_int8", in: -1, want: 127}, test_int8{fn: mul_int8_Neg127, fnname: "mul_int8_Neg127", in: -1, want: 127}, test_int8{fn: mul_Neg127_int8, fnname: "mul_Neg127_int8", in: 0, want: 0}, test_int8{fn: mul_int8_Neg127, fnname: "mul_int8_Neg127", in: 0, want: 0}, test_int8{fn: mul_Neg127_int8, fnname: "mul_Neg127_int8", in: 1, want: -127}, test_int8{fn: mul_int8_Neg127, fnname: "mul_int8_Neg127", in: 1, want: -127}, test_int8{fn: mul_Neg127_int8, fnname: "mul_Neg127_int8", in: 126, want: 126}, test_int8{fn: mul_int8_Neg127, fnname: "mul_int8_Neg127", in: 126, want: 126}, test_int8{fn: mul_Neg127_int8, fnname: "mul_Neg127_int8", in: 127, want: -1}, test_int8{fn: mul_int8_Neg127, fnname: "mul_int8_Neg127", in: 127, want: -1}, test_int8{fn: mul_Neg1_int8, fnname: "mul_Neg1_int8", in: -128, want: -128}, test_int8{fn: mul_int8_Neg1, fnname: "mul_int8_Neg1", in: -128, want: -128}, test_int8{fn: mul_Neg1_int8, fnname: "mul_Neg1_int8", in: -127, want: 127}, test_int8{fn: mul_int8_Neg1, fnname: "mul_int8_Neg1", in: -127, want: 127}, test_int8{fn: mul_Neg1_int8, fnname: "mul_Neg1_int8", in: -1, want: 1}, test_int8{fn: mul_int8_Neg1, fnname: "mul_int8_Neg1", in: -1, want: 1}, test_int8{fn: mul_Neg1_int8, fnname: "mul_Neg1_int8", in: 0, want: 0}, test_int8{fn: mul_int8_Neg1, fnname: "mul_int8_Neg1", in: 0, want: 0}, test_int8{fn: mul_Neg1_int8, fnname: "mul_Neg1_int8", in: 1, want: -1}, test_int8{fn: mul_int8_Neg1, fnname: "mul_int8_Neg1", in: 1, want: -1}, test_int8{fn: mul_Neg1_int8, fnname: "mul_Neg1_int8", in: 126, want: -126}, test_int8{fn: mul_int8_Neg1, fnname: "mul_int8_Neg1", in: 126, want: -126}, test_int8{fn: mul_Neg1_int8, fnname: "mul_Neg1_int8", in: 127, want: -127}, test_int8{fn: mul_int8_Neg1, fnname: "mul_int8_Neg1", in: 127, want: -127}, test_int8{fn: mul_0_int8, fnname: "mul_0_int8", in: -128, want: 0}, test_int8{fn: mul_int8_0, fnname: "mul_int8_0", in: -128, want: 0}, test_int8{fn: mul_0_int8, fnname: "mul_0_int8", in: -127, want: 0}, test_int8{fn: mul_int8_0, fnname: "mul_int8_0", in: -127, want: 0}, test_int8{fn: mul_0_int8, fnname: "mul_0_int8", in: -1, want: 0}, test_int8{fn: mul_int8_0, fnname: "mul_int8_0", in: -1, want: 0}, test_int8{fn: mul_0_int8, fnname: "mul_0_int8", in: 0, want: 0}, test_int8{fn: mul_int8_0, fnname: "mul_int8_0", in: 0, want: 0}, test_int8{fn: mul_0_int8, fnname: "mul_0_int8", in: 1, want: 0}, test_int8{fn: mul_int8_0, fnname: "mul_int8_0", in: 1, want: 0}, test_int8{fn: mul_0_int8, fnname: "mul_0_int8", in: 126, want: 0}, test_int8{fn: mul_int8_0, fnname: "mul_int8_0", in: 126, want: 0}, test_int8{fn: mul_0_int8, fnname: "mul_0_int8", in: 127, want: 0}, test_int8{fn: mul_int8_0, fnname: "mul_int8_0", in: 127, want: 0}, test_int8{fn: mul_1_int8, fnname: "mul_1_int8", in: -128, want: -128}, test_int8{fn: mul_int8_1, fnname: "mul_int8_1", in: -128, want: -128}, test_int8{fn: mul_1_int8, fnname: "mul_1_int8", in: -127, want: -127}, test_int8{fn: mul_int8_1, fnname: "mul_int8_1", in: -127, want: -127}, test_int8{fn: mul_1_int8, fnname: "mul_1_int8", in: -1, want: -1}, test_int8{fn: mul_int8_1, fnname: "mul_int8_1", in: -1, want: -1}, test_int8{fn: mul_1_int8, fnname: "mul_1_int8", in: 0, want: 0}, test_int8{fn: mul_int8_1, fnname: "mul_int8_1", in: 0, want: 0}, test_int8{fn: mul_1_int8, fnname: "mul_1_int8", in: 1, want: 1}, test_int8{fn: mul_int8_1, fnname: "mul_int8_1", in: 1, want: 1}, test_int8{fn: mul_1_int8, fnname: "mul_1_int8", in: 126, want: 126}, test_int8{fn: mul_int8_1, fnname: "mul_int8_1", in: 126, want: 126}, test_int8{fn: mul_1_int8, fnname: "mul_1_int8", in: 127, want: 127}, test_int8{fn: mul_int8_1, fnname: "mul_int8_1", in: 127, want: 127}, test_int8{fn: mul_126_int8, fnname: "mul_126_int8", in: -128, want: 0}, test_int8{fn: mul_int8_126, fnname: "mul_int8_126", in: -128, want: 0}, test_int8{fn: mul_126_int8, fnname: "mul_126_int8", in: -127, want: 126}, test_int8{fn: mul_int8_126, fnname: "mul_int8_126", in: -127, want: 126}, test_int8{fn: mul_126_int8, fnname: "mul_126_int8", in: -1, want: -126}, test_int8{fn: mul_int8_126, fnname: "mul_int8_126", in: -1, want: -126}, test_int8{fn: mul_126_int8, fnname: "mul_126_int8", in: 0, want: 0}, test_int8{fn: mul_int8_126, fnname: "mul_int8_126", in: 0, want: 0}, test_int8{fn: mul_126_int8, fnname: "mul_126_int8", in: 1, want: 126}, test_int8{fn: mul_int8_126, fnname: "mul_int8_126", in: 1, want: 126}, test_int8{fn: mul_126_int8, fnname: "mul_126_int8", in: 126, want: 4}, test_int8{fn: mul_int8_126, fnname: "mul_int8_126", in: 126, want: 4}, test_int8{fn: mul_126_int8, fnname: "mul_126_int8", in: 127, want: -126}, test_int8{fn: mul_int8_126, fnname: "mul_int8_126", in: 127, want: -126}, test_int8{fn: mul_127_int8, fnname: "mul_127_int8", in: -128, want: -128}, test_int8{fn: mul_int8_127, fnname: "mul_int8_127", in: -128, want: -128}, test_int8{fn: mul_127_int8, fnname: "mul_127_int8", in: -127, want: -1}, test_int8{fn: mul_int8_127, fnname: "mul_int8_127", in: -127, want: -1}, test_int8{fn: mul_127_int8, fnname: "mul_127_int8", in: -1, want: -127}, test_int8{fn: mul_int8_127, fnname: "mul_int8_127", in: -1, want: -127}, test_int8{fn: mul_127_int8, fnname: "mul_127_int8", in: 0, want: 0}, test_int8{fn: mul_int8_127, fnname: "mul_int8_127", in: 0, want: 0}, test_int8{fn: mul_127_int8, fnname: "mul_127_int8", in: 1, want: 127}, test_int8{fn: mul_int8_127, fnname: "mul_int8_127", in: 1, want: 127}, test_int8{fn: mul_127_int8, fnname: "mul_127_int8", in: 126, want: -126}, test_int8{fn: mul_int8_127, fnname: "mul_int8_127", in: 126, want: -126}, test_int8{fn: mul_127_int8, fnname: "mul_127_int8", in: 127, want: 1}, test_int8{fn: mul_int8_127, fnname: "mul_int8_127", in: 127, want: 1}, test_int8{fn: mod_Neg128_int8, fnname: "mod_Neg128_int8", in: -128, want: 0}, test_int8{fn: mod_int8_Neg128, fnname: "mod_int8_Neg128", in: -128, want: 0}, test_int8{fn: mod_Neg128_int8, fnname: "mod_Neg128_int8", in: -127, want: -1}, test_int8{fn: mod_int8_Neg128, fnname: "mod_int8_Neg128", in: -127, want: -127}, test_int8{fn: mod_Neg128_int8, fnname: "mod_Neg128_int8", in: -1, want: 0}, test_int8{fn: mod_int8_Neg128, fnname: "mod_int8_Neg128", in: -1, want: -1}, test_int8{fn: mod_int8_Neg128, fnname: "mod_int8_Neg128", in: 0, want: 0}, test_int8{fn: mod_Neg128_int8, fnname: "mod_Neg128_int8", in: 1, want: 0}, test_int8{fn: mod_int8_Neg128, fnname: "mod_int8_Neg128", in: 1, want: 1}, test_int8{fn: mod_Neg128_int8, fnname: "mod_Neg128_int8", in: 126, want: -2}, test_int8{fn: mod_int8_Neg128, fnname: "mod_int8_Neg128", in: 126, want: 126}, test_int8{fn: mod_Neg128_int8, fnname: "mod_Neg128_int8", in: 127, want: -1}, test_int8{fn: mod_int8_Neg128, fnname: "mod_int8_Neg128", in: 127, want: 127}, test_int8{fn: mod_Neg127_int8, fnname: "mod_Neg127_int8", in: -128, want: -127}, test_int8{fn: mod_int8_Neg127, fnname: "mod_int8_Neg127", in: -128, want: -1}, test_int8{fn: mod_Neg127_int8, fnname: "mod_Neg127_int8", in: -127, want: 0}, test_int8{fn: mod_int8_Neg127, fnname: "mod_int8_Neg127", in: -127, want: 0}, test_int8{fn: mod_Neg127_int8, fnname: "mod_Neg127_int8", in: -1, want: 0}, test_int8{fn: mod_int8_Neg127, fnname: "mod_int8_Neg127", in: -1, want: -1}, test_int8{fn: mod_int8_Neg127, fnname: "mod_int8_Neg127", in: 0, want: 0}, test_int8{fn: mod_Neg127_int8, fnname: "mod_Neg127_int8", in: 1, want: 0}, test_int8{fn: mod_int8_Neg127, fnname: "mod_int8_Neg127", in: 1, want: 1}, test_int8{fn: mod_Neg127_int8, fnname: "mod_Neg127_int8", in: 126, want: -1}, test_int8{fn: mod_int8_Neg127, fnname: "mod_int8_Neg127", in: 126, want: 126}, test_int8{fn: mod_Neg127_int8, fnname: "mod_Neg127_int8", in: 127, want: 0}, test_int8{fn: mod_int8_Neg127, fnname: "mod_int8_Neg127", in: 127, want: 0}, test_int8{fn: mod_Neg1_int8, fnname: "mod_Neg1_int8", in: -128, want: -1}, test_int8{fn: mod_int8_Neg1, fnname: "mod_int8_Neg1", in: -128, want: 0}, test_int8{fn: mod_Neg1_int8, fnname: "mod_Neg1_int8", in: -127, want: -1}, test_int8{fn: mod_int8_Neg1, fnname: "mod_int8_Neg1", in: -127, want: 0}, test_int8{fn: mod_Neg1_int8, fnname: "mod_Neg1_int8", in: -1, want: 0}, test_int8{fn: mod_int8_Neg1, fnname: "mod_int8_Neg1", in: -1, want: 0}, test_int8{fn: mod_int8_Neg1, fnname: "mod_int8_Neg1", in: 0, want: 0}, test_int8{fn: mod_Neg1_int8, fnname: "mod_Neg1_int8", in: 1, want: 0}, test_int8{fn: mod_int8_Neg1, fnname: "mod_int8_Neg1", in: 1, want: 0}, test_int8{fn: mod_Neg1_int8, fnname: "mod_Neg1_int8", in: 126, want: -1}, test_int8{fn: mod_int8_Neg1, fnname: "mod_int8_Neg1", in: 126, want: 0}, test_int8{fn: mod_Neg1_int8, fnname: "mod_Neg1_int8", in: 127, want: -1}, test_int8{fn: mod_int8_Neg1, fnname: "mod_int8_Neg1", in: 127, want: 0}, test_int8{fn: mod_0_int8, fnname: "mod_0_int8", in: -128, want: 0}, test_int8{fn: mod_0_int8, fnname: "mod_0_int8", in: -127, want: 0}, test_int8{fn: mod_0_int8, fnname: "mod_0_int8", in: -1, want: 0}, test_int8{fn: mod_0_int8, fnname: "mod_0_int8", in: 1, want: 0}, test_int8{fn: mod_0_int8, fnname: "mod_0_int8", in: 126, want: 0}, test_int8{fn: mod_0_int8, fnname: "mod_0_int8", in: 127, want: 0}, test_int8{fn: mod_1_int8, fnname: "mod_1_int8", in: -128, want: 1}, test_int8{fn: mod_int8_1, fnname: "mod_int8_1", in: -128, want: 0}, test_int8{fn: mod_1_int8, fnname: "mod_1_int8", in: -127, want: 1}, test_int8{fn: mod_int8_1, fnname: "mod_int8_1", in: -127, want: 0}, test_int8{fn: mod_1_int8, fnname: "mod_1_int8", in: -1, want: 0}, test_int8{fn: mod_int8_1, fnname: "mod_int8_1", in: -1, want: 0}, test_int8{fn: mod_int8_1, fnname: "mod_int8_1", in: 0, want: 0}, test_int8{fn: mod_1_int8, fnname: "mod_1_int8", in: 1, want: 0}, test_int8{fn: mod_int8_1, fnname: "mod_int8_1", in: 1, want: 0}, test_int8{fn: mod_1_int8, fnname: "mod_1_int8", in: 126, want: 1}, test_int8{fn: mod_int8_1, fnname: "mod_int8_1", in: 126, want: 0}, test_int8{fn: mod_1_int8, fnname: "mod_1_int8", in: 127, want: 1}, test_int8{fn: mod_int8_1, fnname: "mod_int8_1", in: 127, want: 0}, test_int8{fn: mod_126_int8, fnname: "mod_126_int8", in: -128, want: 126}, test_int8{fn: mod_int8_126, fnname: "mod_int8_126", in: -128, want: -2}, test_int8{fn: mod_126_int8, fnname: "mod_126_int8", in: -127, want: 126}, test_int8{fn: mod_int8_126, fnname: "mod_int8_126", in: -127, want: -1}, test_int8{fn: mod_126_int8, fnname: "mod_126_int8", in: -1, want: 0}, test_int8{fn: mod_int8_126, fnname: "mod_int8_126", in: -1, want: -1}, test_int8{fn: mod_int8_126, fnname: "mod_int8_126", in: 0, want: 0}, test_int8{fn: mod_126_int8, fnname: "mod_126_int8", in: 1, want: 0}, test_int8{fn: mod_int8_126, fnname: "mod_int8_126", in: 1, want: 1}, test_int8{fn: mod_126_int8, fnname: "mod_126_int8", in: 126, want: 0}, test_int8{fn: mod_int8_126, fnname: "mod_int8_126", in: 126, want: 0}, test_int8{fn: mod_126_int8, fnname: "mod_126_int8", in: 127, want: 126}, test_int8{fn: mod_int8_126, fnname: "mod_int8_126", in: 127, want: 1}, test_int8{fn: mod_127_int8, fnname: "mod_127_int8", in: -128, want: 127}, test_int8{fn: mod_int8_127, fnname: "mod_int8_127", in: -128, want: -1}, test_int8{fn: mod_127_int8, fnname: "mod_127_int8", in: -127, want: 0}, test_int8{fn: mod_int8_127, fnname: "mod_int8_127", in: -127, want: 0}, test_int8{fn: mod_127_int8, fnname: "mod_127_int8", in: -1, want: 0}, test_int8{fn: mod_int8_127, fnname: "mod_int8_127", in: -1, want: -1}, test_int8{fn: mod_int8_127, fnname: "mod_int8_127", in: 0, want: 0}, test_int8{fn: mod_127_int8, fnname: "mod_127_int8", in: 1, want: 0}, test_int8{fn: mod_int8_127, fnname: "mod_int8_127", in: 1, want: 1}, test_int8{fn: mod_127_int8, fnname: "mod_127_int8", in: 126, want: 1}, test_int8{fn: mod_int8_127, fnname: "mod_int8_127", in: 126, want: 126}, test_int8{fn: mod_127_int8, fnname: "mod_127_int8", in: 127, want: 0}, test_int8{fn: mod_int8_127, fnname: "mod_int8_127", in: 127, want: 0}, test_int8{fn: and_Neg128_int8, fnname: "and_Neg128_int8", in: -128, want: -128}, test_int8{fn: and_int8_Neg128, fnname: "and_int8_Neg128", in: -128, want: -128}, test_int8{fn: and_Neg128_int8, fnname: "and_Neg128_int8", in: -127, want: -128}, test_int8{fn: and_int8_Neg128, fnname: "and_int8_Neg128", in: -127, want: -128}, test_int8{fn: and_Neg128_int8, fnname: "and_Neg128_int8", in: -1, want: -128}, test_int8{fn: and_int8_Neg128, fnname: "and_int8_Neg128", in: -1, want: -128}, test_int8{fn: and_Neg128_int8, fnname: "and_Neg128_int8", in: 0, want: 0}, test_int8{fn: and_int8_Neg128, fnname: "and_int8_Neg128", in: 0, want: 0}, test_int8{fn: and_Neg128_int8, fnname: "and_Neg128_int8", in: 1, want: 0}, test_int8{fn: and_int8_Neg128, fnname: "and_int8_Neg128", in: 1, want: 0}, test_int8{fn: and_Neg128_int8, fnname: "and_Neg128_int8", in: 126, want: 0}, test_int8{fn: and_int8_Neg128, fnname: "and_int8_Neg128", in: 126, want: 0}, test_int8{fn: and_Neg128_int8, fnname: "and_Neg128_int8", in: 127, want: 0}, test_int8{fn: and_int8_Neg128, fnname: "and_int8_Neg128", in: 127, want: 0}, test_int8{fn: and_Neg127_int8, fnname: "and_Neg127_int8", in: -128, want: -128}, test_int8{fn: and_int8_Neg127, fnname: "and_int8_Neg127", in: -128, want: -128}, test_int8{fn: and_Neg127_int8, fnname: "and_Neg127_int8", in: -127, want: -127}, test_int8{fn: and_int8_Neg127, fnname: "and_int8_Neg127", in: -127, want: -127}, test_int8{fn: and_Neg127_int8, fnname: "and_Neg127_int8", in: -1, want: -127}, test_int8{fn: and_int8_Neg127, fnname: "and_int8_Neg127", in: -1, want: -127}, test_int8{fn: and_Neg127_int8, fnname: "and_Neg127_int8", in: 0, want: 0}, test_int8{fn: and_int8_Neg127, fnname: "and_int8_Neg127", in: 0, want: 0}, test_int8{fn: and_Neg127_int8, fnname: "and_Neg127_int8", in: 1, want: 1}, test_int8{fn: and_int8_Neg127, fnname: "and_int8_Neg127", in: 1, want: 1}, test_int8{fn: and_Neg127_int8, fnname: "and_Neg127_int8", in: 126, want: 0}, test_int8{fn: and_int8_Neg127, fnname: "and_int8_Neg127", in: 126, want: 0}, test_int8{fn: and_Neg127_int8, fnname: "and_Neg127_int8", in: 127, want: 1}, test_int8{fn: and_int8_Neg127, fnname: "and_int8_Neg127", in: 127, want: 1}, test_int8{fn: and_Neg1_int8, fnname: "and_Neg1_int8", in: -128, want: -128}, test_int8{fn: and_int8_Neg1, fnname: "and_int8_Neg1", in: -128, want: -128}, test_int8{fn: and_Neg1_int8, fnname: "and_Neg1_int8", in: -127, want: -127}, test_int8{fn: and_int8_Neg1, fnname: "and_int8_Neg1", in: -127, want: -127}, test_int8{fn: and_Neg1_int8, fnname: "and_Neg1_int8", in: -1, want: -1}, test_int8{fn: and_int8_Neg1, fnname: "and_int8_Neg1", in: -1, want: -1}, test_int8{fn: and_Neg1_int8, fnname: "and_Neg1_int8", in: 0, want: 0}, test_int8{fn: and_int8_Neg1, fnname: "and_int8_Neg1", in: 0, want: 0}, test_int8{fn: and_Neg1_int8, fnname: "and_Neg1_int8", in: 1, want: 1}, test_int8{fn: and_int8_Neg1, fnname: "and_int8_Neg1", in: 1, want: 1}, test_int8{fn: and_Neg1_int8, fnname: "and_Neg1_int8", in: 126, want: 126}, test_int8{fn: and_int8_Neg1, fnname: "and_int8_Neg1", in: 126, want: 126}, test_int8{fn: and_Neg1_int8, fnname: "and_Neg1_int8", in: 127, want: 127}, test_int8{fn: and_int8_Neg1, fnname: "and_int8_Neg1", in: 127, want: 127}, test_int8{fn: and_0_int8, fnname: "and_0_int8", in: -128, want: 0}, test_int8{fn: and_int8_0, fnname: "and_int8_0", in: -128, want: 0}, test_int8{fn: and_0_int8, fnname: "and_0_int8", in: -127, want: 0}, test_int8{fn: and_int8_0, fnname: "and_int8_0", in: -127, want: 0}, test_int8{fn: and_0_int8, fnname: "and_0_int8", in: -1, want: 0}, test_int8{fn: and_int8_0, fnname: "and_int8_0", in: -1, want: 0}, test_int8{fn: and_0_int8, fnname: "and_0_int8", in: 0, want: 0}, test_int8{fn: and_int8_0, fnname: "and_int8_0", in: 0, want: 0}, test_int8{fn: and_0_int8, fnname: "and_0_int8", in: 1, want: 0}, test_int8{fn: and_int8_0, fnname: "and_int8_0", in: 1, want: 0}, test_int8{fn: and_0_int8, fnname: "and_0_int8", in: 126, want: 0}, test_int8{fn: and_int8_0, fnname: "and_int8_0", in: 126, want: 0}, test_int8{fn: and_0_int8, fnname: "and_0_int8", in: 127, want: 0}, test_int8{fn: and_int8_0, fnname: "and_int8_0", in: 127, want: 0}, test_int8{fn: and_1_int8, fnname: "and_1_int8", in: -128, want: 0}, test_int8{fn: and_int8_1, fnname: "and_int8_1", in: -128, want: 0}, test_int8{fn: and_1_int8, fnname: "and_1_int8", in: -127, want: 1}, test_int8{fn: and_int8_1, fnname: "and_int8_1", in: -127, want: 1}, test_int8{fn: and_1_int8, fnname: "and_1_int8", in: -1, want: 1}, test_int8{fn: and_int8_1, fnname: "and_int8_1", in: -1, want: 1}, test_int8{fn: and_1_int8, fnname: "and_1_int8", in: 0, want: 0}, test_int8{fn: and_int8_1, fnname: "and_int8_1", in: 0, want: 0}, test_int8{fn: and_1_int8, fnname: "and_1_int8", in: 1, want: 1}, test_int8{fn: and_int8_1, fnname: "and_int8_1", in: 1, want: 1}, test_int8{fn: and_1_int8, fnname: "and_1_int8", in: 126, want: 0}, test_int8{fn: and_int8_1, fnname: "and_int8_1", in: 126, want: 0}, test_int8{fn: and_1_int8, fnname: "and_1_int8", in: 127, want: 1}, test_int8{fn: and_int8_1, fnname: "and_int8_1", in: 127, want: 1}, test_int8{fn: and_126_int8, fnname: "and_126_int8", in: -128, want: 0}, test_int8{fn: and_int8_126, fnname: "and_int8_126", in: -128, want: 0}, test_int8{fn: and_126_int8, fnname: "and_126_int8", in: -127, want: 0}, test_int8{fn: and_int8_126, fnname: "and_int8_126", in: -127, want: 0}, test_int8{fn: and_126_int8, fnname: "and_126_int8", in: -1, want: 126}, test_int8{fn: and_int8_126, fnname: "and_int8_126", in: -1, want: 126}, test_int8{fn: and_126_int8, fnname: "and_126_int8", in: 0, want: 0}, test_int8{fn: and_int8_126, fnname: "and_int8_126", in: 0, want: 0}, test_int8{fn: and_126_int8, fnname: "and_126_int8", in: 1, want: 0}, test_int8{fn: and_int8_126, fnname: "and_int8_126", in: 1, want: 0}, test_int8{fn: and_126_int8, fnname: "and_126_int8", in: 126, want: 126}, test_int8{fn: and_int8_126, fnname: "and_int8_126", in: 126, want: 126}, test_int8{fn: and_126_int8, fnname: "and_126_int8", in: 127, want: 126}, test_int8{fn: and_int8_126, fnname: "and_int8_126", in: 127, want: 126}, test_int8{fn: and_127_int8, fnname: "and_127_int8", in: -128, want: 0}, test_int8{fn: and_int8_127, fnname: "and_int8_127", in: -128, want: 0}, test_int8{fn: and_127_int8, fnname: "and_127_int8", in: -127, want: 1}, test_int8{fn: and_int8_127, fnname: "and_int8_127", in: -127, want: 1}, test_int8{fn: and_127_int8, fnname: "and_127_int8", in: -1, want: 127}, test_int8{fn: and_int8_127, fnname: "and_int8_127", in: -1, want: 127}, test_int8{fn: and_127_int8, fnname: "and_127_int8", in: 0, want: 0}, test_int8{fn: and_int8_127, fnname: "and_int8_127", in: 0, want: 0}, test_int8{fn: and_127_int8, fnname: "and_127_int8", in: 1, want: 1}, test_int8{fn: and_int8_127, fnname: "and_int8_127", in: 1, want: 1}, test_int8{fn: and_127_int8, fnname: "and_127_int8", in: 126, want: 126}, test_int8{fn: and_int8_127, fnname: "and_int8_127", in: 126, want: 126}, test_int8{fn: and_127_int8, fnname: "and_127_int8", in: 127, want: 127}, test_int8{fn: and_int8_127, fnname: "and_int8_127", in: 127, want: 127}, test_int8{fn: or_Neg128_int8, fnname: "or_Neg128_int8", in: -128, want: -128}, test_int8{fn: or_int8_Neg128, fnname: "or_int8_Neg128", in: -128, want: -128}, test_int8{fn: or_Neg128_int8, fnname: "or_Neg128_int8", in: -127, want: -127}, test_int8{fn: or_int8_Neg128, fnname: "or_int8_Neg128", in: -127, want: -127}, test_int8{fn: or_Neg128_int8, fnname: "or_Neg128_int8", in: -1, want: -1}, test_int8{fn: or_int8_Neg128, fnname: "or_int8_Neg128", in: -1, want: -1}, test_int8{fn: or_Neg128_int8, fnname: "or_Neg128_int8", in: 0, want: -128}, test_int8{fn: or_int8_Neg128, fnname: "or_int8_Neg128", in: 0, want: -128}, test_int8{fn: or_Neg128_int8, fnname: "or_Neg128_int8", in: 1, want: -127}, test_int8{fn: or_int8_Neg128, fnname: "or_int8_Neg128", in: 1, want: -127}, test_int8{fn: or_Neg128_int8, fnname: "or_Neg128_int8", in: 126, want: -2}, test_int8{fn: or_int8_Neg128, fnname: "or_int8_Neg128", in: 126, want: -2}, test_int8{fn: or_Neg128_int8, fnname: "or_Neg128_int8", in: 127, want: -1}, test_int8{fn: or_int8_Neg128, fnname: "or_int8_Neg128", in: 127, want: -1}, test_int8{fn: or_Neg127_int8, fnname: "or_Neg127_int8", in: -128, want: -127}, test_int8{fn: or_int8_Neg127, fnname: "or_int8_Neg127", in: -128, want: -127}, test_int8{fn: or_Neg127_int8, fnname: "or_Neg127_int8", in: -127, want: -127}, test_int8{fn: or_int8_Neg127, fnname: "or_int8_Neg127", in: -127, want: -127}, test_int8{fn: or_Neg127_int8, fnname: "or_Neg127_int8", in: -1, want: -1}, test_int8{fn: or_int8_Neg127, fnname: "or_int8_Neg127", in: -1, want: -1}, test_int8{fn: or_Neg127_int8, fnname: "or_Neg127_int8", in: 0, want: -127}, test_int8{fn: or_int8_Neg127, fnname: "or_int8_Neg127", in: 0, want: -127}, test_int8{fn: or_Neg127_int8, fnname: "or_Neg127_int8", in: 1, want: -127}, test_int8{fn: or_int8_Neg127, fnname: "or_int8_Neg127", in: 1, want: -127}, test_int8{fn: or_Neg127_int8, fnname: "or_Neg127_int8", in: 126, want: -1}, test_int8{fn: or_int8_Neg127, fnname: "or_int8_Neg127", in: 126, want: -1}, test_int8{fn: or_Neg127_int8, fnname: "or_Neg127_int8", in: 127, want: -1}, test_int8{fn: or_int8_Neg127, fnname: "or_int8_Neg127", in: 127, want: -1}, test_int8{fn: or_Neg1_int8, fnname: "or_Neg1_int8", in: -128, want: -1}, test_int8{fn: or_int8_Neg1, fnname: "or_int8_Neg1", in: -128, want: -1}, test_int8{fn: or_Neg1_int8, fnname: "or_Neg1_int8", in: -127, want: -1}, test_int8{fn: or_int8_Neg1, fnname: "or_int8_Neg1", in: -127, want: -1}, test_int8{fn: or_Neg1_int8, fnname: "or_Neg1_int8", in: -1, want: -1}, test_int8{fn: or_int8_Neg1, fnname: "or_int8_Neg1", in: -1, want: -1}, test_int8{fn: or_Neg1_int8, fnname: "or_Neg1_int8", in: 0, want: -1}, test_int8{fn: or_int8_Neg1, fnname: "or_int8_Neg1", in: 0, want: -1}, test_int8{fn: or_Neg1_int8, fnname: "or_Neg1_int8", in: 1, want: -1}, test_int8{fn: or_int8_Neg1, fnname: "or_int8_Neg1", in: 1, want: -1}, test_int8{fn: or_Neg1_int8, fnname: "or_Neg1_int8", in: 126, want: -1}, test_int8{fn: or_int8_Neg1, fnname: "or_int8_Neg1", in: 126, want: -1}, test_int8{fn: or_Neg1_int8, fnname: "or_Neg1_int8", in: 127, want: -1}, test_int8{fn: or_int8_Neg1, fnname: "or_int8_Neg1", in: 127, want: -1}, test_int8{fn: or_0_int8, fnname: "or_0_int8", in: -128, want: -128}, test_int8{fn: or_int8_0, fnname: "or_int8_0", in: -128, want: -128}, test_int8{fn: or_0_int8, fnname: "or_0_int8", in: -127, want: -127}, test_int8{fn: or_int8_0, fnname: "or_int8_0", in: -127, want: -127}, test_int8{fn: or_0_int8, fnname: "or_0_int8", in: -1, want: -1}, test_int8{fn: or_int8_0, fnname: "or_int8_0", in: -1, want: -1}, test_int8{fn: or_0_int8, fnname: "or_0_int8", in: 0, want: 0}, test_int8{fn: or_int8_0, fnname: "or_int8_0", in: 0, want: 0}, test_int8{fn: or_0_int8, fnname: "or_0_int8", in: 1, want: 1}, test_int8{fn: or_int8_0, fnname: "or_int8_0", in: 1, want: 1}, test_int8{fn: or_0_int8, fnname: "or_0_int8", in: 126, want: 126}, test_int8{fn: or_int8_0, fnname: "or_int8_0", in: 126, want: 126}, test_int8{fn: or_0_int8, fnname: "or_0_int8", in: 127, want: 127}, test_int8{fn: or_int8_0, fnname: "or_int8_0", in: 127, want: 127}, test_int8{fn: or_1_int8, fnname: "or_1_int8", in: -128, want: -127}, test_int8{fn: or_int8_1, fnname: "or_int8_1", in: -128, want: -127}, test_int8{fn: or_1_int8, fnname: "or_1_int8", in: -127, want: -127}, test_int8{fn: or_int8_1, fnname: "or_int8_1", in: -127, want: -127}, test_int8{fn: or_1_int8, fnname: "or_1_int8", in: -1, want: -1}, test_int8{fn: or_int8_1, fnname: "or_int8_1", in: -1, want: -1}, test_int8{fn: or_1_int8, fnname: "or_1_int8", in: 0, want: 1}, test_int8{fn: or_int8_1, fnname: "or_int8_1", in: 0, want: 1}, test_int8{fn: or_1_int8, fnname: "or_1_int8", in: 1, want: 1}, test_int8{fn: or_int8_1, fnname: "or_int8_1", in: 1, want: 1}, test_int8{fn: or_1_int8, fnname: "or_1_int8", in: 126, want: 127}, test_int8{fn: or_int8_1, fnname: "or_int8_1", in: 126, want: 127}, test_int8{fn: or_1_int8, fnname: "or_1_int8", in: 127, want: 127}, test_int8{fn: or_int8_1, fnname: "or_int8_1", in: 127, want: 127}, test_int8{fn: or_126_int8, fnname: "or_126_int8", in: -128, want: -2}, test_int8{fn: or_int8_126, fnname: "or_int8_126", in: -128, want: -2}, test_int8{fn: or_126_int8, fnname: "or_126_int8", in: -127, want: -1}, test_int8{fn: or_int8_126, fnname: "or_int8_126", in: -127, want: -1}, test_int8{fn: or_126_int8, fnname: "or_126_int8", in: -1, want: -1}, test_int8{fn: or_int8_126, fnname: "or_int8_126", in: -1, want: -1}, test_int8{fn: or_126_int8, fnname: "or_126_int8", in: 0, want: 126}, test_int8{fn: or_int8_126, fnname: "or_int8_126", in: 0, want: 126}, test_int8{fn: or_126_int8, fnname: "or_126_int8", in: 1, want: 127}, test_int8{fn: or_int8_126, fnname: "or_int8_126", in: 1, want: 127}, test_int8{fn: or_126_int8, fnname: "or_126_int8", in: 126, want: 126}, test_int8{fn: or_int8_126, fnname: "or_int8_126", in: 126, want: 126}, test_int8{fn: or_126_int8, fnname: "or_126_int8", in: 127, want: 127}, test_int8{fn: or_int8_126, fnname: "or_int8_126", in: 127, want: 127}, test_int8{fn: or_127_int8, fnname: "or_127_int8", in: -128, want: -1}, test_int8{fn: or_int8_127, fnname: "or_int8_127", in: -128, want: -1}, test_int8{fn: or_127_int8, fnname: "or_127_int8", in: -127, want: -1}, test_int8{fn: or_int8_127, fnname: "or_int8_127", in: -127, want: -1}, test_int8{fn: or_127_int8, fnname: "or_127_int8", in: -1, want: -1}, test_int8{fn: or_int8_127, fnname: "or_int8_127", in: -1, want: -1}, test_int8{fn: or_127_int8, fnname: "or_127_int8", in: 0, want: 127}, test_int8{fn: or_int8_127, fnname: "or_int8_127", in: 0, want: 127}, test_int8{fn: or_127_int8, fnname: "or_127_int8", in: 1, want: 127}, test_int8{fn: or_int8_127, fnname: "or_int8_127", in: 1, want: 127}, test_int8{fn: or_127_int8, fnname: "or_127_int8", in: 126, want: 127}, test_int8{fn: or_int8_127, fnname: "or_int8_127", in: 126, want: 127}, test_int8{fn: or_127_int8, fnname: "or_127_int8", in: 127, want: 127}, test_int8{fn: or_int8_127, fnname: "or_int8_127", in: 127, want: 127}, test_int8{fn: xor_Neg128_int8, fnname: "xor_Neg128_int8", in: -128, want: 0}, test_int8{fn: xor_int8_Neg128, fnname: "xor_int8_Neg128", in: -128, want: 0}, test_int8{fn: xor_Neg128_int8, fnname: "xor_Neg128_int8", in: -127, want: 1}, test_int8{fn: xor_int8_Neg128, fnname: "xor_int8_Neg128", in: -127, want: 1}, test_int8{fn: xor_Neg128_int8, fnname: "xor_Neg128_int8", in: -1, want: 127}, test_int8{fn: xor_int8_Neg128, fnname: "xor_int8_Neg128", in: -1, want: 127}, test_int8{fn: xor_Neg128_int8, fnname: "xor_Neg128_int8", in: 0, want: -128}, test_int8{fn: xor_int8_Neg128, fnname: "xor_int8_Neg128", in: 0, want: -128}, test_int8{fn: xor_Neg128_int8, fnname: "xor_Neg128_int8", in: 1, want: -127}, test_int8{fn: xor_int8_Neg128, fnname: "xor_int8_Neg128", in: 1, want: -127}, test_int8{fn: xor_Neg128_int8, fnname: "xor_Neg128_int8", in: 126, want: -2}, test_int8{fn: xor_int8_Neg128, fnname: "xor_int8_Neg128", in: 126, want: -2}, test_int8{fn: xor_Neg128_int8, fnname: "xor_Neg128_int8", in: 127, want: -1}, test_int8{fn: xor_int8_Neg128, fnname: "xor_int8_Neg128", in: 127, want: -1}, test_int8{fn: xor_Neg127_int8, fnname: "xor_Neg127_int8", in: -128, want: 1}, test_int8{fn: xor_int8_Neg127, fnname: "xor_int8_Neg127", in: -128, want: 1}, test_int8{fn: xor_Neg127_int8, fnname: "xor_Neg127_int8", in: -127, want: 0}, test_int8{fn: xor_int8_Neg127, fnname: "xor_int8_Neg127", in: -127, want: 0}, test_int8{fn: xor_Neg127_int8, fnname: "xor_Neg127_int8", in: -1, want: 126}, test_int8{fn: xor_int8_Neg127, fnname: "xor_int8_Neg127", in: -1, want: 126}, test_int8{fn: xor_Neg127_int8, fnname: "xor_Neg127_int8", in: 0, want: -127}, test_int8{fn: xor_int8_Neg127, fnname: "xor_int8_Neg127", in: 0, want: -127}, test_int8{fn: xor_Neg127_int8, fnname: "xor_Neg127_int8", in: 1, want: -128}, test_int8{fn: xor_int8_Neg127, fnname: "xor_int8_Neg127", in: 1, want: -128}, test_int8{fn: xor_Neg127_int8, fnname: "xor_Neg127_int8", in: 126, want: -1}, test_int8{fn: xor_int8_Neg127, fnname: "xor_int8_Neg127", in: 126, want: -1}, test_int8{fn: xor_Neg127_int8, fnname: "xor_Neg127_int8", in: 127, want: -2}, test_int8{fn: xor_int8_Neg127, fnname: "xor_int8_Neg127", in: 127, want: -2}, test_int8{fn: xor_Neg1_int8, fnname: "xor_Neg1_int8", in: -128, want: 127}, test_int8{fn: xor_int8_Neg1, fnname: "xor_int8_Neg1", in: -128, want: 127}, test_int8{fn: xor_Neg1_int8, fnname: "xor_Neg1_int8", in: -127, want: 126}, test_int8{fn: xor_int8_Neg1, fnname: "xor_int8_Neg1", in: -127, want: 126}, test_int8{fn: xor_Neg1_int8, fnname: "xor_Neg1_int8", in: -1, want: 0}, test_int8{fn: xor_int8_Neg1, fnname: "xor_int8_Neg1", in: -1, want: 0}, test_int8{fn: xor_Neg1_int8, fnname: "xor_Neg1_int8", in: 0, want: -1}, test_int8{fn: xor_int8_Neg1, fnname: "xor_int8_Neg1", in: 0, want: -1}, test_int8{fn: xor_Neg1_int8, fnname: "xor_Neg1_int8", in: 1, want: -2}, test_int8{fn: xor_int8_Neg1, fnname: "xor_int8_Neg1", in: 1, want: -2}, test_int8{fn: xor_Neg1_int8, fnname: "xor_Neg1_int8", in: 126, want: -127}, test_int8{fn: xor_int8_Neg1, fnname: "xor_int8_Neg1", in: 126, want: -127}, test_int8{fn: xor_Neg1_int8, fnname: "xor_Neg1_int8", in: 127, want: -128}, test_int8{fn: xor_int8_Neg1, fnname: "xor_int8_Neg1", in: 127, want: -128}, test_int8{fn: xor_0_int8, fnname: "xor_0_int8", in: -128, want: -128}, test_int8{fn: xor_int8_0, fnname: "xor_int8_0", in: -128, want: -128}, test_int8{fn: xor_0_int8, fnname: "xor_0_int8", in: -127, want: -127}, test_int8{fn: xor_int8_0, fnname: "xor_int8_0", in: -127, want: -127}, test_int8{fn: xor_0_int8, fnname: "xor_0_int8", in: -1, want: -1}, test_int8{fn: xor_int8_0, fnname: "xor_int8_0", in: -1, want: -1}, test_int8{fn: xor_0_int8, fnname: "xor_0_int8", in: 0, want: 0}, test_int8{fn: xor_int8_0, fnname: "xor_int8_0", in: 0, want: 0}, test_int8{fn: xor_0_int8, fnname: "xor_0_int8", in: 1, want: 1}, test_int8{fn: xor_int8_0, fnname: "xor_int8_0", in: 1, want: 1}, test_int8{fn: xor_0_int8, fnname: "xor_0_int8", in: 126, want: 126}, test_int8{fn: xor_int8_0, fnname: "xor_int8_0", in: 126, want: 126}, test_int8{fn: xor_0_int8, fnname: "xor_0_int8", in: 127, want: 127}, test_int8{fn: xor_int8_0, fnname: "xor_int8_0", in: 127, want: 127}, test_int8{fn: xor_1_int8, fnname: "xor_1_int8", in: -128, want: -127}, test_int8{fn: xor_int8_1, fnname: "xor_int8_1", in: -128, want: -127}, test_int8{fn: xor_1_int8, fnname: "xor_1_int8", in: -127, want: -128}, test_int8{fn: xor_int8_1, fnname: "xor_int8_1", in: -127, want: -128}, test_int8{fn: xor_1_int8, fnname: "xor_1_int8", in: -1, want: -2}, test_int8{fn: xor_int8_1, fnname: "xor_int8_1", in: -1, want: -2}, test_int8{fn: xor_1_int8, fnname: "xor_1_int8", in: 0, want: 1}, test_int8{fn: xor_int8_1, fnname: "xor_int8_1", in: 0, want: 1}, test_int8{fn: xor_1_int8, fnname: "xor_1_int8", in: 1, want: 0}, test_int8{fn: xor_int8_1, fnname: "xor_int8_1", in: 1, want: 0}, test_int8{fn: xor_1_int8, fnname: "xor_1_int8", in: 126, want: 127}, test_int8{fn: xor_int8_1, fnname: "xor_int8_1", in: 126, want: 127}, test_int8{fn: xor_1_int8, fnname: "xor_1_int8", in: 127, want: 126}, test_int8{fn: xor_int8_1, fnname: "xor_int8_1", in: 127, want: 126}, test_int8{fn: xor_126_int8, fnname: "xor_126_int8", in: -128, want: -2}, test_int8{fn: xor_int8_126, fnname: "xor_int8_126", in: -128, want: -2}, test_int8{fn: xor_126_int8, fnname: "xor_126_int8", in: -127, want: -1}, test_int8{fn: xor_int8_126, fnname: "xor_int8_126", in: -127, want: -1}, test_int8{fn: xor_126_int8, fnname: "xor_126_int8", in: -1, want: -127}, test_int8{fn: xor_int8_126, fnname: "xor_int8_126", in: -1, want: -127}, test_int8{fn: xor_126_int8, fnname: "xor_126_int8", in: 0, want: 126}, test_int8{fn: xor_int8_126, fnname: "xor_int8_126", in: 0, want: 126}, test_int8{fn: xor_126_int8, fnname: "xor_126_int8", in: 1, want: 127}, test_int8{fn: xor_int8_126, fnname: "xor_int8_126", in: 1, want: 127}, test_int8{fn: xor_126_int8, fnname: "xor_126_int8", in: 126, want: 0}, test_int8{fn: xor_int8_126, fnname: "xor_int8_126", in: 126, want: 0}, test_int8{fn: xor_126_int8, fnname: "xor_126_int8", in: 127, want: 1}, test_int8{fn: xor_int8_126, fnname: "xor_int8_126", in: 127, want: 1}, test_int8{fn: xor_127_int8, fnname: "xor_127_int8", in: -128, want: -1}, test_int8{fn: xor_int8_127, fnname: "xor_int8_127", in: -128, want: -1}, test_int8{fn: xor_127_int8, fnname: "xor_127_int8", in: -127, want: -2}, test_int8{fn: xor_int8_127, fnname: "xor_int8_127", in: -127, want: -2}, test_int8{fn: xor_127_int8, fnname: "xor_127_int8", in: -1, want: -128}, test_int8{fn: xor_int8_127, fnname: "xor_int8_127", in: -1, want: -128}, test_int8{fn: xor_127_int8, fnname: "xor_127_int8", in: 0, want: 127}, test_int8{fn: xor_int8_127, fnname: "xor_int8_127", in: 0, want: 127}, test_int8{fn: xor_127_int8, fnname: "xor_127_int8", in: 1, want: 126}, test_int8{fn: xor_int8_127, fnname: "xor_int8_127", in: 1, want: 126}, test_int8{fn: xor_127_int8, fnname: "xor_127_int8", in: 126, want: 1}, test_int8{fn: xor_int8_127, fnname: "xor_int8_127", in: 126, want: 1}, test_int8{fn: xor_127_int8, fnname: "xor_127_int8", in: 127, want: 0}, test_int8{fn: xor_int8_127, fnname: "xor_int8_127", in: 127, want: 0}} // TestArithmeticConst tests results for arithmetic operations against constants. func TestArithmeticConst(t *testing.T) { for _, test := range tests_uint64 { if got := test.fn(test.in); got != test.want { t.Errorf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want) } } for _, test := range tests_uint64mul { if got := test.fn(test.in); got != test.want { t.Errorf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want) } } for _, test := range tests_int64 { if got := test.fn(test.in); got != test.want { t.Errorf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want) } } for _, test := range tests_int64mul { if got := test.fn(test.in); got != test.want { t.Errorf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want) } } for _, test := range tests_uint32 { if got := test.fn(test.in); got != test.want { t.Errorf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want) } } for _, test := range tests_uint32mul { if got := test.fn(test.in); got != test.want { t.Errorf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want) } } for _, test := range tests_int32 { if got := test.fn(test.in); got != test.want { t.Errorf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want) } } for _, test := range tests_int32mul { if got := test.fn(test.in); got != test.want { t.Errorf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want) } } for _, test := range tests_uint16 { if got := test.fn(test.in); got != test.want { t.Errorf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want) } } for _, test := range tests_int16 { if got := test.fn(test.in); got != test.want { t.Errorf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want) } } for _, test := range tests_uint8 { if got := test.fn(test.in); got != test.want { t.Errorf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want) } } for _, test := range tests_int8 { if got := test.fn(test.in); got != test.want { t.Errorf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want) } } } PK ! WF��] ] testdata/array_test.gonu �[��� package main import "testing" //go:noinline func testSliceLenCap12_ssa(a [10]int, i, j int) (int, int) { b := a[i:j] return len(b), cap(b) } //go:noinline func testSliceLenCap1_ssa(a [10]int, i, j int) (int, int) { b := a[i:] return len(b), cap(b) } //go:noinline func testSliceLenCap2_ssa(a [10]int, i, j int) (int, int) { b := a[:j] return len(b), cap(b) } func testSliceLenCap(t *testing.T) { a := [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} tests := [...]struct { fn func(a [10]int, i, j int) (int, int) i, j int // slice range l, c int // len, cap }{ // -1 means the value is not used. {testSliceLenCap12_ssa, 0, 0, 0, 10}, {testSliceLenCap12_ssa, 0, 1, 1, 10}, {testSliceLenCap12_ssa, 0, 10, 10, 10}, {testSliceLenCap12_ssa, 10, 10, 0, 0}, {testSliceLenCap12_ssa, 0, 5, 5, 10}, {testSliceLenCap12_ssa, 5, 5, 0, 5}, {testSliceLenCap12_ssa, 5, 10, 5, 5}, {testSliceLenCap1_ssa, 0, -1, 0, 10}, {testSliceLenCap1_ssa, 5, -1, 5, 5}, {testSliceLenCap1_ssa, 10, -1, 0, 0}, {testSliceLenCap2_ssa, -1, 0, 0, 10}, {testSliceLenCap2_ssa, -1, 5, 5, 10}, {testSliceLenCap2_ssa, -1, 10, 10, 10}, } for i, test := range tests { if l, c := test.fn(a, test.i, test.j); l != test.l && c != test.c { t.Errorf("#%d len(a[%d:%d]), cap(a[%d:%d]) = %d %d, want %d %d", i, test.i, test.j, test.i, test.j, l, c, test.l, test.c) } } } //go:noinline func testSliceGetElement_ssa(a [10]int, i, j, p int) int { return a[i:j][p] } func testSliceGetElement(t *testing.T) { a := [10]int{0, 10, 20, 30, 40, 50, 60, 70, 80, 90} tests := [...]struct { i, j, p int want int // a[i:j][p] }{ {0, 10, 2, 20}, {0, 5, 4, 40}, {5, 10, 3, 80}, {1, 9, 7, 80}, } for i, test := range tests { if got := testSliceGetElement_ssa(a, test.i, test.j, test.p); got != test.want { t.Errorf("#%d a[%d:%d][%d] = %d, wanted %d", i, test.i, test.j, test.p, got, test.want) } } } //go:noinline func testSliceSetElement_ssa(a *[10]int, i, j, p, x int) { (*a)[i:j][p] = x } func testSliceSetElement(t *testing.T) { a := [10]int{0, 10, 20, 30, 40, 50, 60, 70, 80, 90} tests := [...]struct { i, j, p int want int // a[i:j][p] }{ {0, 10, 2, 17}, {0, 5, 4, 11}, {5, 10, 3, 28}, {1, 9, 7, 99}, } for i, test := range tests { testSliceSetElement_ssa(&a, test.i, test.j, test.p, test.want) if got := a[test.i+test.p]; got != test.want { t.Errorf("#%d a[%d:%d][%d] = %d, wanted %d", i, test.i, test.j, test.p, got, test.want) } } } func testSlicePanic1(t *testing.T) { defer func() { if r := recover(); r != nil { //println("panicked as expected") } }() a := [10]int{0, 10, 20, 30, 40, 50, 60, 70, 80, 90} testSliceLenCap12_ssa(a, 3, 12) t.Errorf("expected to panic, but didn't") } func testSlicePanic2(t *testing.T) { defer func() { if r := recover(); r != nil { //println("panicked as expected") } }() a := [10]int{0, 10, 20, 30, 40, 50, 60, 70, 80, 90} testSliceGetElement_ssa(a, 3, 7, 4) t.Errorf("expected to panic, but didn't") } func TestArray(t *testing.T) { testSliceLenCap(t) testSliceGetElement(t) testSliceSetElement(t) testSlicePanic1(t) testSlicePanic2(t) } PK ! ��toy y testdata/ptrsort.gonu �[��� package main // Test generic sort function with two different pointer types in different packages, // make sure only one instantiation is created. import ( "fmt" "cmd/compile/internal/test/testdata/mysort" ) type MyString struct { string } func (a *MyString) Less(b *MyString) bool { return a.string < b.string } func main() { mysort.F() sl1 := []*mysort.MyInt{{7}, {1}, {4}, {6}} mysort.Sort(sl1) fmt.Printf("%v %v %v %v\n", sl1[0], sl1[1], sl1[2], sl1[3]) sl2 := []*MyString{{"when"}, {"in"}, {"the"}, {"course"}, {"of"}} mysort.Sort(sl2) fmt.Printf("%v %v %v %v %v\n", sl2[0], sl2[1], sl2[2], sl2[3], sl2[4]) } PK ! ���M M testdata/ptrsort.outnu �[��� &{3} &{4} &{7} &{8} &{1} &{4} &{6} &{7} &{course} &{in} &{of} &{the} &{when} PK ! ^ng�� � testdata/map_test.gonu �[��� // Copyright 2015 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. // map.go tests map operations. package main import "testing" //go:noinline func lenMap_ssa(v map[int]int) int { return len(v) } func testLenMap(t *testing.T) { v := make(map[int]int) v[0] = 0 v[1] = 0 v[2] = 0 if want, got := 3, lenMap_ssa(v); got != want { t.Errorf("expected len(map) = %d, got %d", want, got) } } func testLenNilMap(t *testing.T) { var v map[int]int if want, got := 0, lenMap_ssa(v); got != want { t.Errorf("expected len(nil) = %d, got %d", want, got) } } func TestMap(t *testing.T) { testLenMap(t) testLenNilMap(t) } PK ! ���p testdata/dupLoad_test.gonu �[��� // 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. // This test makes sure that we don't split a single // load up into two separate loads. package main import "testing" //go:noinline func read1(b []byte) (uint16, uint16) { // There is only a single read of b[0]. The two // returned values must have the same low byte. v := b[0] return uint16(v), uint16(v) | uint16(b[1])<<8 } func main1(t *testing.T) { const N = 100000 done := make(chan bool, 2) b := make([]byte, 2) go func() { for i := 0; i < N; i++ { b[0] = byte(i) b[1] = byte(i) } done <- true }() go func() { for i := 0; i < N; i++ { x, y := read1(b) if byte(x) != byte(y) { t.Errorf("x=%x y=%x\n", x, y) done <- false return } } done <- true }() <-done <-done } //go:noinline func read2(b []byte) (uint16, uint16) { // There is only a single read of b[1]. The two // returned values must have the same high byte. v := uint16(b[1]) << 8 return v, uint16(b[0]) | v } func main2(t *testing.T) { const N = 100000 done := make(chan bool, 2) b := make([]byte, 2) go func() { for i := 0; i < N; i++ { b[0] = byte(i) b[1] = byte(i) } done <- true }() go func() { for i := 0; i < N; i++ { x, y := read2(b) if x&0xff00 != y&0xff00 { t.Errorf("x=%x y=%x\n", x, y) done <- false return } } done <- true }() <-done <-done } func TestDupLoad(t *testing.T) { main1(t) main2(t) } PK ! ��]� � testdata/chan_test.gonu �[��� // Copyright 2015 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. // chan.go tests chan operations. package main import "testing" //go:noinline func lenChan_ssa(v chan int) int { return len(v) } //go:noinline func capChan_ssa(v chan int) int { return cap(v) } func testLenChan(t *testing.T) { v := make(chan int, 10) v <- 1 v <- 1 v <- 1 if want, got := 3, lenChan_ssa(v); got != want { t.Errorf("expected len(chan) = %d, got %d", want, got) } } func testLenNilChan(t *testing.T) { var v chan int if want, got := 0, lenChan_ssa(v); got != want { t.Errorf("expected len(nil) = %d, got %d", want, got) } } func testCapChan(t *testing.T) { v := make(chan int, 25) if want, got := 25, capChan_ssa(v); got != want { t.Errorf("expected cap(chan) = %d, got %d", want, got) } } func testCapNilChan(t *testing.T) { var v chan int if want, got := 0, capChan_ssa(v); got != want { t.Errorf("expected cap(nil) = %d, got %d", want, got) } } func TestChan(t *testing.T) { testLenChan(t) testLenNilChan(t) testCapChan(t) testCapNilChan(t) } PK ! �g�<} <} testdata/arithBoundary_test.gonu �[��� // Code generated by gen/arithBoundaryGen.go. DO NOT EDIT. package main import "testing" type utd64 struct { a, b uint64 add, sub, mul, div, mod uint64 } type itd64 struct { a, b int64 add, sub, mul, div, mod int64 } type utd32 struct { a, b uint32 add, sub, mul, div, mod uint32 } type itd32 struct { a, b int32 add, sub, mul, div, mod int32 } type utd16 struct { a, b uint16 add, sub, mul, div, mod uint16 } type itd16 struct { a, b int16 add, sub, mul, div, mod int16 } type utd8 struct { a, b uint8 add, sub, mul, div, mod uint8 } type itd8 struct { a, b int8 add, sub, mul, div, mod int8 } //go:noinline func add_uint64_ssa(a, b uint64) uint64 { return a + b } //go:noinline func sub_uint64_ssa(a, b uint64) uint64 { return a - b } //go:noinline func div_uint64_ssa(a, b uint64) uint64 { return a / b } //go:noinline func mod_uint64_ssa(a, b uint64) uint64 { return a % b } //go:noinline func mul_uint64_ssa(a, b uint64) uint64 { return a * b } //go:noinline func add_int64_ssa(a, b int64) int64 { return a + b } //go:noinline func sub_int64_ssa(a, b int64) int64 { return a - b } //go:noinline func div_int64_ssa(a, b int64) int64 { return a / b } //go:noinline func mod_int64_ssa(a, b int64) int64 { return a % b } //go:noinline func mul_int64_ssa(a, b int64) int64 { return a * b } //go:noinline func add_uint32_ssa(a, b uint32) uint32 { return a + b } //go:noinline func sub_uint32_ssa(a, b uint32) uint32 { return a - b } //go:noinline func div_uint32_ssa(a, b uint32) uint32 { return a / b } //go:noinline func mod_uint32_ssa(a, b uint32) uint32 { return a % b } //go:noinline func mul_uint32_ssa(a, b uint32) uint32 { return a * b } //go:noinline func add_int32_ssa(a, b int32) int32 { return a + b } //go:noinline func sub_int32_ssa(a, b int32) int32 { return a - b } //go:noinline func div_int32_ssa(a, b int32) int32 { return a / b } //go:noinline func mod_int32_ssa(a, b int32) int32 { return a % b } //go:noinline func mul_int32_ssa(a, b int32) int32 { return a * b } //go:noinline func add_uint16_ssa(a, b uint16) uint16 { return a + b } //go:noinline func sub_uint16_ssa(a, b uint16) uint16 { return a - b } //go:noinline func div_uint16_ssa(a, b uint16) uint16 { return a / b } //go:noinline func mod_uint16_ssa(a, b uint16) uint16 { return a % b } //go:noinline func mul_uint16_ssa(a, b uint16) uint16 { return a * b } //go:noinline func add_int16_ssa(a, b int16) int16 { return a + b } //go:noinline func sub_int16_ssa(a, b int16) int16 { return a - b } //go:noinline func div_int16_ssa(a, b int16) int16 { return a / b } //go:noinline func mod_int16_ssa(a, b int16) int16 { return a % b } //go:noinline func mul_int16_ssa(a, b int16) int16 { return a * b } //go:noinline func add_uint8_ssa(a, b uint8) uint8 { return a + b } //go:noinline func sub_uint8_ssa(a, b uint8) uint8 { return a - b } //go:noinline func div_uint8_ssa(a, b uint8) uint8 { return a / b } //go:noinline func mod_uint8_ssa(a, b uint8) uint8 { return a % b } //go:noinline func mul_uint8_ssa(a, b uint8) uint8 { return a * b } //go:noinline func add_int8_ssa(a, b int8) int8 { return a + b } //go:noinline func sub_int8_ssa(a, b int8) int8 { return a - b } //go:noinline func div_int8_ssa(a, b int8) int8 { return a / b } //go:noinline func mod_int8_ssa(a, b int8) int8 { return a % b } //go:noinline func mul_int8_ssa(a, b int8) int8 { return a * b } var uint64_data []utd64 = []utd64{utd64{a: 0, b: 0, add: 0, sub: 0, mul: 0}, utd64{a: 0, b: 1, add: 1, sub: 18446744073709551615, mul: 0, div: 0, mod: 0}, utd64{a: 0, b: 4294967296, add: 4294967296, sub: 18446744069414584320, mul: 0, div: 0, mod: 0}, utd64{a: 0, b: 18446744073709551615, add: 18446744073709551615, sub: 1, mul: 0, div: 0, mod: 0}, utd64{a: 1, b: 0, add: 1, sub: 1, mul: 0}, utd64{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0}, utd64{a: 1, b: 4294967296, add: 4294967297, sub: 18446744069414584321, mul: 4294967296, div: 0, mod: 1}, utd64{a: 1, b: 18446744073709551615, add: 0, sub: 2, mul: 18446744073709551615, div: 0, mod: 1}, utd64{a: 4294967296, b: 0, add: 4294967296, sub: 4294967296, mul: 0}, utd64{a: 4294967296, b: 1, add: 4294967297, sub: 4294967295, mul: 4294967296, div: 4294967296, mod: 0}, utd64{a: 4294967296, b: 4294967296, add: 8589934592, sub: 0, mul: 0, div: 1, mod: 0}, utd64{a: 4294967296, b: 18446744073709551615, add: 4294967295, sub: 4294967297, mul: 18446744069414584320, div: 0, mod: 4294967296}, utd64{a: 18446744073709551615, b: 0, add: 18446744073709551615, sub: 18446744073709551615, mul: 0}, utd64{a: 18446744073709551615, b: 1, add: 0, sub: 18446744073709551614, mul: 18446744073709551615, div: 18446744073709551615, mod: 0}, utd64{a: 18446744073709551615, b: 4294967296, add: 4294967295, sub: 18446744069414584319, mul: 18446744069414584320, div: 4294967295, mod: 4294967295}, utd64{a: 18446744073709551615, b: 18446744073709551615, add: 18446744073709551614, sub: 0, mul: 1, div: 1, mod: 0}, } var int64_data []itd64 = []itd64{itd64{a: -9223372036854775808, b: -9223372036854775808, add: 0, sub: 0, mul: 0, div: 1, mod: 0}, itd64{a: -9223372036854775808, b: -9223372036854775807, add: 1, sub: -1, mul: -9223372036854775808, div: 1, mod: -1}, itd64{a: -9223372036854775808, b: -4294967296, add: 9223372032559808512, sub: -9223372032559808512, mul: 0, div: 2147483648, mod: 0}, itd64{a: -9223372036854775808, b: -1, add: 9223372036854775807, sub: -9223372036854775807, mul: -9223372036854775808, div: -9223372036854775808, mod: 0}, itd64{a: -9223372036854775808, b: 0, add: -9223372036854775808, sub: -9223372036854775808, mul: 0}, itd64{a: -9223372036854775808, b: 1, add: -9223372036854775807, sub: 9223372036854775807, mul: -9223372036854775808, div: -9223372036854775808, mod: 0}, itd64{a: -9223372036854775808, b: 4294967296, add: -9223372032559808512, sub: 9223372032559808512, mul: 0, div: -2147483648, mod: 0}, itd64{a: -9223372036854775808, b: 9223372036854775806, add: -2, sub: 2, mul: 0, div: -1, mod: -2}, itd64{a: -9223372036854775808, b: 9223372036854775807, add: -1, sub: 1, mul: -9223372036854775808, div: -1, mod: -1}, itd64{a: -9223372036854775807, b: -9223372036854775808, add: 1, sub: 1, mul: -9223372036854775808, div: 0, mod: -9223372036854775807}, itd64{a: -9223372036854775807, b: -9223372036854775807, add: 2, sub: 0, mul: 1, div: 1, mod: 0}, itd64{a: -9223372036854775807, b: -4294967296, add: 9223372032559808513, sub: -9223372032559808511, mul: -4294967296, div: 2147483647, mod: -4294967295}, itd64{a: -9223372036854775807, b: -1, add: -9223372036854775808, sub: -9223372036854775806, mul: 9223372036854775807, div: 9223372036854775807, mod: 0}, itd64{a: -9223372036854775807, b: 0, add: -9223372036854775807, sub: -9223372036854775807, mul: 0}, itd64{a: -9223372036854775807, b: 1, add: -9223372036854775806, sub: -9223372036854775808, mul: -9223372036854775807, div: -9223372036854775807, mod: 0}, itd64{a: -9223372036854775807, b: 4294967296, add: -9223372032559808511, sub: 9223372032559808513, mul: 4294967296, div: -2147483647, mod: -4294967295}, itd64{a: -9223372036854775807, b: 9223372036854775806, add: -1, sub: 3, mul: 9223372036854775806, div: -1, mod: -1}, itd64{a: -9223372036854775807, b: 9223372036854775807, add: 0, sub: 2, mul: -1, div: -1, mod: 0}, itd64{a: -4294967296, b: -9223372036854775808, add: 9223372032559808512, sub: 9223372032559808512, mul: 0, div: 0, mod: -4294967296}, itd64{a: -4294967296, b: -9223372036854775807, add: 9223372032559808513, sub: 9223372032559808511, mul: -4294967296, div: 0, mod: -4294967296}, itd64{a: -4294967296, b: -4294967296, add: -8589934592, sub: 0, mul: 0, div: 1, mod: 0}, itd64{a: -4294967296, b: -1, add: -4294967297, sub: -4294967295, mul: 4294967296, div: 4294967296, mod: 0}, itd64{a: -4294967296, b: 0, add: -4294967296, sub: -4294967296, mul: 0}, itd64{a: -4294967296, b: 1, add: -4294967295, sub: -4294967297, mul: -4294967296, div: -4294967296, mod: 0}, itd64{a: -4294967296, b: 4294967296, add: 0, sub: -8589934592, mul: 0, div: -1, mod: 0}, itd64{a: -4294967296, b: 9223372036854775806, add: 9223372032559808510, sub: 9223372032559808514, mul: 8589934592, div: 0, mod: -4294967296}, itd64{a: -4294967296, b: 9223372036854775807, add: 9223372032559808511, sub: 9223372032559808513, mul: 4294967296, div: 0, mod: -4294967296}, itd64{a: -1, b: -9223372036854775808, add: 9223372036854775807, sub: 9223372036854775807, mul: -9223372036854775808, div: 0, mod: -1}, itd64{a: -1, b: -9223372036854775807, add: -9223372036854775808, sub: 9223372036854775806, mul: 9223372036854775807, div: 0, mod: -1}, itd64{a: -1, b: -4294967296, add: -4294967297, sub: 4294967295, mul: 4294967296, div: 0, mod: -1}, itd64{a: -1, b: -1, add: -2, sub: 0, mul: 1, div: 1, mod: 0}, itd64{a: -1, b: 0, add: -1, sub: -1, mul: 0}, itd64{a: -1, b: 1, add: 0, sub: -2, mul: -1, div: -1, mod: 0}, itd64{a: -1, b: 4294967296, add: 4294967295, sub: -4294967297, mul: -4294967296, div: 0, mod: -1}, itd64{a: -1, b: 9223372036854775806, add: 9223372036854775805, sub: -9223372036854775807, mul: -9223372036854775806, div: 0, mod: -1}, itd64{a: -1, b: 9223372036854775807, add: 9223372036854775806, sub: -9223372036854775808, mul: -9223372036854775807, div: 0, mod: -1}, itd64{a: 0, b: -9223372036854775808, add: -9223372036854775808, sub: -9223372036854775808, mul: 0, div: 0, mod: 0}, itd64{a: 0, b: -9223372036854775807, add: -9223372036854775807, sub: 9223372036854775807, mul: 0, div: 0, mod: 0}, itd64{a: 0, b: -4294967296, add: -4294967296, sub: 4294967296, mul: 0, div: 0, mod: 0}, itd64{a: 0, b: -1, add: -1, sub: 1, mul: 0, div: 0, mod: 0}, itd64{a: 0, b: 0, add: 0, sub: 0, mul: 0}, itd64{a: 0, b: 1, add: 1, sub: -1, mul: 0, div: 0, mod: 0}, itd64{a: 0, b: 4294967296, add: 4294967296, sub: -4294967296, mul: 0, div: 0, mod: 0}, itd64{a: 0, b: 9223372036854775806, add: 9223372036854775806, sub: -9223372036854775806, mul: 0, div: 0, mod: 0}, itd64{a: 0, b: 9223372036854775807, add: 9223372036854775807, sub: -9223372036854775807, mul: 0, div: 0, mod: 0}, itd64{a: 1, b: -9223372036854775808, add: -9223372036854775807, sub: -9223372036854775807, mul: -9223372036854775808, div: 0, mod: 1}, itd64{a: 1, b: -9223372036854775807, add: -9223372036854775806, sub: -9223372036854775808, mul: -9223372036854775807, div: 0, mod: 1}, itd64{a: 1, b: -4294967296, add: -4294967295, sub: 4294967297, mul: -4294967296, div: 0, mod: 1}, itd64{a: 1, b: -1, add: 0, sub: 2, mul: -1, div: -1, mod: 0}, itd64{a: 1, b: 0, add: 1, sub: 1, mul: 0}, itd64{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0}, itd64{a: 1, b: 4294967296, add: 4294967297, sub: -4294967295, mul: 4294967296, div: 0, mod: 1}, itd64{a: 1, b: 9223372036854775806, add: 9223372036854775807, sub: -9223372036854775805, mul: 9223372036854775806, div: 0, mod: 1}, itd64{a: 1, b: 9223372036854775807, add: -9223372036854775808, sub: -9223372036854775806, mul: 9223372036854775807, div: 0, mod: 1}, itd64{a: 4294967296, b: -9223372036854775808, add: -9223372032559808512, sub: -9223372032559808512, mul: 0, div: 0, mod: 4294967296}, itd64{a: 4294967296, b: -9223372036854775807, add: -9223372032559808511, sub: -9223372032559808513, mul: 4294967296, div: 0, mod: 4294967296}, itd64{a: 4294967296, b: -4294967296, add: 0, sub: 8589934592, mul: 0, div: -1, mod: 0}, itd64{a: 4294967296, b: -1, add: 4294967295, sub: 4294967297, mul: -4294967296, div: -4294967296, mod: 0}, itd64{a: 4294967296, b: 0, add: 4294967296, sub: 4294967296, mul: 0}, itd64{a: 4294967296, b: 1, add: 4294967297, sub: 4294967295, mul: 4294967296, div: 4294967296, mod: 0}, itd64{a: 4294967296, b: 4294967296, add: 8589934592, sub: 0, mul: 0, div: 1, mod: 0}, itd64{a: 4294967296, b: 9223372036854775806, add: -9223372032559808514, sub: -9223372032559808510, mul: -8589934592, div: 0, mod: 4294967296}, itd64{a: 4294967296, b: 9223372036854775807, add: -9223372032559808513, sub: -9223372032559808511, mul: -4294967296, div: 0, mod: 4294967296}, itd64{a: 9223372036854775806, b: -9223372036854775808, add: -2, sub: -2, mul: 0, div: 0, mod: 9223372036854775806}, itd64{a: 9223372036854775806, b: -9223372036854775807, add: -1, sub: -3, mul: 9223372036854775806, div: 0, mod: 9223372036854775806}, itd64{a: 9223372036854775806, b: -4294967296, add: 9223372032559808510, sub: -9223372032559808514, mul: 8589934592, div: -2147483647, mod: 4294967294}, itd64{a: 9223372036854775806, b: -1, add: 9223372036854775805, sub: 9223372036854775807, mul: -9223372036854775806, div: -9223372036854775806, mod: 0}, itd64{a: 9223372036854775806, b: 0, add: 9223372036854775806, sub: 9223372036854775806, mul: 0}, itd64{a: 9223372036854775806, b: 1, add: 9223372036854775807, sub: 9223372036854775805, mul: 9223372036854775806, div: 9223372036854775806, mod: 0}, itd64{a: 9223372036854775806, b: 4294967296, add: -9223372032559808514, sub: 9223372032559808510, mul: -8589934592, div: 2147483647, mod: 4294967294}, itd64{a: 9223372036854775806, b: 9223372036854775806, add: -4, sub: 0, mul: 4, div: 1, mod: 0}, itd64{a: 9223372036854775806, b: 9223372036854775807, add: -3, sub: -1, mul: -9223372036854775806, div: 0, mod: 9223372036854775806}, itd64{a: 9223372036854775807, b: -9223372036854775808, add: -1, sub: -1, mul: -9223372036854775808, div: 0, mod: 9223372036854775807}, itd64{a: 9223372036854775807, b: -9223372036854775807, add: 0, sub: -2, mul: -1, div: -1, mod: 0}, itd64{a: 9223372036854775807, b: -4294967296, add: 9223372032559808511, sub: -9223372032559808513, mul: 4294967296, div: -2147483647, mod: 4294967295}, itd64{a: 9223372036854775807, b: -1, add: 9223372036854775806, sub: -9223372036854775808, mul: -9223372036854775807, div: -9223372036854775807, mod: 0}, itd64{a: 9223372036854775807, b: 0, add: 9223372036854775807, sub: 9223372036854775807, mul: 0}, itd64{a: 9223372036854775807, b: 1, add: -9223372036854775808, sub: 9223372036854775806, mul: 9223372036854775807, div: 9223372036854775807, mod: 0}, itd64{a: 9223372036854775807, b: 4294967296, add: -9223372032559808513, sub: 9223372032559808511, mul: -4294967296, div: 2147483647, mod: 4294967295}, itd64{a: 9223372036854775807, b: 9223372036854775806, add: -3, sub: 1, mul: -9223372036854775806, div: 1, mod: 1}, itd64{a: 9223372036854775807, b: 9223372036854775807, add: -2, sub: 0, mul: 1, div: 1, mod: 0}, } var uint32_data []utd32 = []utd32{utd32{a: 0, b: 0, add: 0, sub: 0, mul: 0}, utd32{a: 0, b: 1, add: 1, sub: 4294967295, mul: 0, div: 0, mod: 0}, utd32{a: 0, b: 4294967295, add: 4294967295, sub: 1, mul: 0, div: 0, mod: 0}, utd32{a: 1, b: 0, add: 1, sub: 1, mul: 0}, utd32{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0}, utd32{a: 1, b: 4294967295, add: 0, sub: 2, mul: 4294967295, div: 0, mod: 1}, utd32{a: 4294967295, b: 0, add: 4294967295, sub: 4294967295, mul: 0}, utd32{a: 4294967295, b: 1, add: 0, sub: 4294967294, mul: 4294967295, div: 4294967295, mod: 0}, utd32{a: 4294967295, b: 4294967295, add: 4294967294, sub: 0, mul: 1, div: 1, mod: 0}, } var int32_data []itd32 = []itd32{itd32{a: -2147483648, b: -2147483648, add: 0, sub: 0, mul: 0, div: 1, mod: 0}, itd32{a: -2147483648, b: -2147483647, add: 1, sub: -1, mul: -2147483648, div: 1, mod: -1}, itd32{a: -2147483648, b: -1, add: 2147483647, sub: -2147483647, mul: -2147483648, div: -2147483648, mod: 0}, itd32{a: -2147483648, b: 0, add: -2147483648, sub: -2147483648, mul: 0}, itd32{a: -2147483648, b: 1, add: -2147483647, sub: 2147483647, mul: -2147483648, div: -2147483648, mod: 0}, itd32{a: -2147483648, b: 2147483647, add: -1, sub: 1, mul: -2147483648, div: -1, mod: -1}, itd32{a: -2147483647, b: -2147483648, add: 1, sub: 1, mul: -2147483648, div: 0, mod: -2147483647}, itd32{a: -2147483647, b: -2147483647, add: 2, sub: 0, mul: 1, div: 1, mod: 0}, itd32{a: -2147483647, b: -1, add: -2147483648, sub: -2147483646, mul: 2147483647, div: 2147483647, mod: 0}, itd32{a: -2147483647, b: 0, add: -2147483647, sub: -2147483647, mul: 0}, itd32{a: -2147483647, b: 1, add: -2147483646, sub: -2147483648, mul: -2147483647, div: -2147483647, mod: 0}, itd32{a: -2147483647, b: 2147483647, add: 0, sub: 2, mul: -1, div: -1, mod: 0}, itd32{a: -1, b: -2147483648, add: 2147483647, sub: 2147483647, mul: -2147483648, div: 0, mod: -1}, itd32{a: -1, b: -2147483647, add: -2147483648, sub: 2147483646, mul: 2147483647, div: 0, mod: -1}, itd32{a: -1, b: -1, add: -2, sub: 0, mul: 1, div: 1, mod: 0}, itd32{a: -1, b: 0, add: -1, sub: -1, mul: 0}, itd32{a: -1, b: 1, add: 0, sub: -2, mul: -1, div: -1, mod: 0}, itd32{a: -1, b: 2147483647, add: 2147483646, sub: -2147483648, mul: -2147483647, div: 0, mod: -1}, itd32{a: 0, b: -2147483648, add: -2147483648, sub: -2147483648, mul: 0, div: 0, mod: 0}, itd32{a: 0, b: -2147483647, add: -2147483647, sub: 2147483647, mul: 0, div: 0, mod: 0}, itd32{a: 0, b: -1, add: -1, sub: 1, mul: 0, div: 0, mod: 0}, itd32{a: 0, b: 0, add: 0, sub: 0, mul: 0}, itd32{a: 0, b: 1, add: 1, sub: -1, mul: 0, div: 0, mod: 0}, itd32{a: 0, b: 2147483647, add: 2147483647, sub: -2147483647, mul: 0, div: 0, mod: 0}, itd32{a: 1, b: -2147483648, add: -2147483647, sub: -2147483647, mul: -2147483648, div: 0, mod: 1}, itd32{a: 1, b: -2147483647, add: -2147483646, sub: -2147483648, mul: -2147483647, div: 0, mod: 1}, itd32{a: 1, b: -1, add: 0, sub: 2, mul: -1, div: -1, mod: 0}, itd32{a: 1, b: 0, add: 1, sub: 1, mul: 0}, itd32{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0}, itd32{a: 1, b: 2147483647, add: -2147483648, sub: -2147483646, mul: 2147483647, div: 0, mod: 1}, itd32{a: 2147483647, b: -2147483648, add: -1, sub: -1, mul: -2147483648, div: 0, mod: 2147483647}, itd32{a: 2147483647, b: -2147483647, add: 0, sub: -2, mul: -1, div: -1, mod: 0}, itd32{a: 2147483647, b: -1, add: 2147483646, sub: -2147483648, mul: -2147483647, div: -2147483647, mod: 0}, itd32{a: 2147483647, b: 0, add: 2147483647, sub: 2147483647, mul: 0}, itd32{a: 2147483647, b: 1, add: -2147483648, sub: 2147483646, mul: 2147483647, div: 2147483647, mod: 0}, itd32{a: 2147483647, b: 2147483647, add: -2, sub: 0, mul: 1, div: 1, mod: 0}, } var uint16_data []utd16 = []utd16{utd16{a: 0, b: 0, add: 0, sub: 0, mul: 0}, utd16{a: 0, b: 1, add: 1, sub: 65535, mul: 0, div: 0, mod: 0}, utd16{a: 0, b: 65535, add: 65535, sub: 1, mul: 0, div: 0, mod: 0}, utd16{a: 1, b: 0, add: 1, sub: 1, mul: 0}, utd16{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0}, utd16{a: 1, b: 65535, add: 0, sub: 2, mul: 65535, div: 0, mod: 1}, utd16{a: 65535, b: 0, add: 65535, sub: 65535, mul: 0}, utd16{a: 65535, b: 1, add: 0, sub: 65534, mul: 65535, div: 65535, mod: 0}, utd16{a: 65535, b: 65535, add: 65534, sub: 0, mul: 1, div: 1, mod: 0}, } var int16_data []itd16 = []itd16{itd16{a: -32768, b: -32768, add: 0, sub: 0, mul: 0, div: 1, mod: 0}, itd16{a: -32768, b: -32767, add: 1, sub: -1, mul: -32768, div: 1, mod: -1}, itd16{a: -32768, b: -1, add: 32767, sub: -32767, mul: -32768, div: -32768, mod: 0}, itd16{a: -32768, b: 0, add: -32768, sub: -32768, mul: 0}, itd16{a: -32768, b: 1, add: -32767, sub: 32767, mul: -32768, div: -32768, mod: 0}, itd16{a: -32768, b: 32766, add: -2, sub: 2, mul: 0, div: -1, mod: -2}, itd16{a: -32768, b: 32767, add: -1, sub: 1, mul: -32768, div: -1, mod: -1}, itd16{a: -32767, b: -32768, add: 1, sub: 1, mul: -32768, div: 0, mod: -32767}, itd16{a: -32767, b: -32767, add: 2, sub: 0, mul: 1, div: 1, mod: 0}, itd16{a: -32767, b: -1, add: -32768, sub: -32766, mul: 32767, div: 32767, mod: 0}, itd16{a: -32767, b: 0, add: -32767, sub: -32767, mul: 0}, itd16{a: -32767, b: 1, add: -32766, sub: -32768, mul: -32767, div: -32767, mod: 0}, itd16{a: -32767, b: 32766, add: -1, sub: 3, mul: 32766, div: -1, mod: -1}, itd16{a: -32767, b: 32767, add: 0, sub: 2, mul: -1, div: -1, mod: 0}, itd16{a: -1, b: -32768, add: 32767, sub: 32767, mul: -32768, div: 0, mod: -1}, itd16{a: -1, b: -32767, add: -32768, sub: 32766, mul: 32767, div: 0, mod: -1}, itd16{a: -1, b: -1, add: -2, sub: 0, mul: 1, div: 1, mod: 0}, itd16{a: -1, b: 0, add: -1, sub: -1, mul: 0}, itd16{a: -1, b: 1, add: 0, sub: -2, mul: -1, div: -1, mod: 0}, itd16{a: -1, b: 32766, add: 32765, sub: -32767, mul: -32766, div: 0, mod: -1}, itd16{a: -1, b: 32767, add: 32766, sub: -32768, mul: -32767, div: 0, mod: -1}, itd16{a: 0, b: -32768, add: -32768, sub: -32768, mul: 0, div: 0, mod: 0}, itd16{a: 0, b: -32767, add: -32767, sub: 32767, mul: 0, div: 0, mod: 0}, itd16{a: 0, b: -1, add: -1, sub: 1, mul: 0, div: 0, mod: 0}, itd16{a: 0, b: 0, add: 0, sub: 0, mul: 0}, itd16{a: 0, b: 1, add: 1, sub: -1, mul: 0, div: 0, mod: 0}, itd16{a: 0, b: 32766, add: 32766, sub: -32766, mul: 0, div: 0, mod: 0}, itd16{a: 0, b: 32767, add: 32767, sub: -32767, mul: 0, div: 0, mod: 0}, itd16{a: 1, b: -32768, add: -32767, sub: -32767, mul: -32768, div: 0, mod: 1}, itd16{a: 1, b: -32767, add: -32766, sub: -32768, mul: -32767, div: 0, mod: 1}, itd16{a: 1, b: -1, add: 0, sub: 2, mul: -1, div: -1, mod: 0}, itd16{a: 1, b: 0, add: 1, sub: 1, mul: 0}, itd16{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0}, itd16{a: 1, b: 32766, add: 32767, sub: -32765, mul: 32766, div: 0, mod: 1}, itd16{a: 1, b: 32767, add: -32768, sub: -32766, mul: 32767, div: 0, mod: 1}, itd16{a: 32766, b: -32768, add: -2, sub: -2, mul: 0, div: 0, mod: 32766}, itd16{a: 32766, b: -32767, add: -1, sub: -3, mul: 32766, div: 0, mod: 32766}, itd16{a: 32766, b: -1, add: 32765, sub: 32767, mul: -32766, div: -32766, mod: 0}, itd16{a: 32766, b: 0, add: 32766, sub: 32766, mul: 0}, itd16{a: 32766, b: 1, add: 32767, sub: 32765, mul: 32766, div: 32766, mod: 0}, itd16{a: 32766, b: 32766, add: -4, sub: 0, mul: 4, div: 1, mod: 0}, itd16{a: 32766, b: 32767, add: -3, sub: -1, mul: -32766, div: 0, mod: 32766}, itd16{a: 32767, b: -32768, add: -1, sub: -1, mul: -32768, div: 0, mod: 32767}, itd16{a: 32767, b: -32767, add: 0, sub: -2, mul: -1, div: -1, mod: 0}, itd16{a: 32767, b: -1, add: 32766, sub: -32768, mul: -32767, div: -32767, mod: 0}, itd16{a: 32767, b: 0, add: 32767, sub: 32767, mul: 0}, itd16{a: 32767, b: 1, add: -32768, sub: 32766, mul: 32767, div: 32767, mod: 0}, itd16{a: 32767, b: 32766, add: -3, sub: 1, mul: -32766, div: 1, mod: 1}, itd16{a: 32767, b: 32767, add: -2, sub: 0, mul: 1, div: 1, mod: 0}, } var uint8_data []utd8 = []utd8{utd8{a: 0, b: 0, add: 0, sub: 0, mul: 0}, utd8{a: 0, b: 1, add: 1, sub: 255, mul: 0, div: 0, mod: 0}, utd8{a: 0, b: 255, add: 255, sub: 1, mul: 0, div: 0, mod: 0}, utd8{a: 1, b: 0, add: 1, sub: 1, mul: 0}, utd8{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0}, utd8{a: 1, b: 255, add: 0, sub: 2, mul: 255, div: 0, mod: 1}, utd8{a: 255, b: 0, add: 255, sub: 255, mul: 0}, utd8{a: 255, b: 1, add: 0, sub: 254, mul: 255, div: 255, mod: 0}, utd8{a: 255, b: 255, add: 254, sub: 0, mul: 1, div: 1, mod: 0}, } var int8_data []itd8 = []itd8{itd8{a: -128, b: -128, add: 0, sub: 0, mul: 0, div: 1, mod: 0}, itd8{a: -128, b: -127, add: 1, sub: -1, mul: -128, div: 1, mod: -1}, itd8{a: -128, b: -1, add: 127, sub: -127, mul: -128, div: -128, mod: 0}, itd8{a: -128, b: 0, add: -128, sub: -128, mul: 0}, itd8{a: -128, b: 1, add: -127, sub: 127, mul: -128, div: -128, mod: 0}, itd8{a: -128, b: 126, add: -2, sub: 2, mul: 0, div: -1, mod: -2}, itd8{a: -128, b: 127, add: -1, sub: 1, mul: -128, div: -1, mod: -1}, itd8{a: -127, b: -128, add: 1, sub: 1, mul: -128, div: 0, mod: -127}, itd8{a: -127, b: -127, add: 2, sub: 0, mul: 1, div: 1, mod: 0}, itd8{a: -127, b: -1, add: -128, sub: -126, mul: 127, div: 127, mod: 0}, itd8{a: -127, b: 0, add: -127, sub: -127, mul: 0}, itd8{a: -127, b: 1, add: -126, sub: -128, mul: -127, div: -127, mod: 0}, itd8{a: -127, b: 126, add: -1, sub: 3, mul: 126, div: -1, mod: -1}, itd8{a: -127, b: 127, add: 0, sub: 2, mul: -1, div: -1, mod: 0}, itd8{a: -1, b: -128, add: 127, sub: 127, mul: -128, div: 0, mod: -1}, itd8{a: -1, b: -127, add: -128, sub: 126, mul: 127, div: 0, mod: -1}, itd8{a: -1, b: -1, add: -2, sub: 0, mul: 1, div: 1, mod: 0}, itd8{a: -1, b: 0, add: -1, sub: -1, mul: 0}, itd8{a: -1, b: 1, add: 0, sub: -2, mul: -1, div: -1, mod: 0}, itd8{a: -1, b: 126, add: 125, sub: -127, mul: -126, div: 0, mod: -1}, itd8{a: -1, b: 127, add: 126, sub: -128, mul: -127, div: 0, mod: -1}, itd8{a: 0, b: -128, add: -128, sub: -128, mul: 0, div: 0, mod: 0}, itd8{a: 0, b: -127, add: -127, sub: 127, mul: 0, div: 0, mod: 0}, itd8{a: 0, b: -1, add: -1, sub: 1, mul: 0, div: 0, mod: 0}, itd8{a: 0, b: 0, add: 0, sub: 0, mul: 0}, itd8{a: 0, b: 1, add: 1, sub: -1, mul: 0, div: 0, mod: 0}, itd8{a: 0, b: 126, add: 126, sub: -126, mul: 0, div: 0, mod: 0}, itd8{a: 0, b: 127, add: 127, sub: -127, mul: 0, div: 0, mod: 0}, itd8{a: 1, b: -128, add: -127, sub: -127, mul: -128, div: 0, mod: 1}, itd8{a: 1, b: -127, add: -126, sub: -128, mul: -127, div: 0, mod: 1}, itd8{a: 1, b: -1, add: 0, sub: 2, mul: -1, div: -1, mod: 0}, itd8{a: 1, b: 0, add: 1, sub: 1, mul: 0}, itd8{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0}, itd8{a: 1, b: 126, add: 127, sub: -125, mul: 126, div: 0, mod: 1}, itd8{a: 1, b: 127, add: -128, sub: -126, mul: 127, div: 0, mod: 1}, itd8{a: 126, b: -128, add: -2, sub: -2, mul: 0, div: 0, mod: 126}, itd8{a: 126, b: -127, add: -1, sub: -3, mul: 126, div: 0, mod: 126}, itd8{a: 126, b: -1, add: 125, sub: 127, mul: -126, div: -126, mod: 0}, itd8{a: 126, b: 0, add: 126, sub: 126, mul: 0}, itd8{a: 126, b: 1, add: 127, sub: 125, mul: 126, div: 126, mod: 0}, itd8{a: 126, b: 126, add: -4, sub: 0, mul: 4, div: 1, mod: 0}, itd8{a: 126, b: 127, add: -3, sub: -1, mul: -126, div: 0, mod: 126}, itd8{a: 127, b: -128, add: -1, sub: -1, mul: -128, div: 0, mod: 127}, itd8{a: 127, b: -127, add: 0, sub: -2, mul: -1, div: -1, mod: 0}, itd8{a: 127, b: -1, add: 126, sub: -128, mul: -127, div: -127, mod: 0}, itd8{a: 127, b: 0, add: 127, sub: 127, mul: 0}, itd8{a: 127, b: 1, add: -128, sub: 126, mul: 127, div: 127, mod: 0}, itd8{a: 127, b: 126, add: -3, sub: 1, mul: -126, div: 1, mod: 1}, itd8{a: 127, b: 127, add: -2, sub: 0, mul: 1, div: 1, mod: 0}, } //TestArithmeticBoundary tests boundary results for arithmetic operations. func TestArithmeticBoundary(t *testing.T) { for _, v := range uint64_data { if got := add_uint64_ssa(v.a, v.b); got != v.add { t.Errorf("add_uint64 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add) } if got := sub_uint64_ssa(v.a, v.b); got != v.sub { t.Errorf("sub_uint64 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub) } if v.b != 0 { if got := div_uint64_ssa(v.a, v.b); got != v.div { t.Errorf("div_uint64 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div) } } if v.b != 0 { if got := mod_uint64_ssa(v.a, v.b); got != v.mod { t.Errorf("mod_uint64 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod) } } if got := mul_uint64_ssa(v.a, v.b); got != v.mul { t.Errorf("mul_uint64 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul) } } for _, v := range int64_data { if got := add_int64_ssa(v.a, v.b); got != v.add { t.Errorf("add_int64 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add) } if got := sub_int64_ssa(v.a, v.b); got != v.sub { t.Errorf("sub_int64 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub) } if v.b != 0 { if got := div_int64_ssa(v.a, v.b); got != v.div { t.Errorf("div_int64 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div) } } if v.b != 0 { if got := mod_int64_ssa(v.a, v.b); got != v.mod { t.Errorf("mod_int64 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod) } } if got := mul_int64_ssa(v.a, v.b); got != v.mul { t.Errorf("mul_int64 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul) } } for _, v := range uint32_data { if got := add_uint32_ssa(v.a, v.b); got != v.add { t.Errorf("add_uint32 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add) } if got := sub_uint32_ssa(v.a, v.b); got != v.sub { t.Errorf("sub_uint32 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub) } if v.b != 0 { if got := div_uint32_ssa(v.a, v.b); got != v.div { t.Errorf("div_uint32 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div) } } if v.b != 0 { if got := mod_uint32_ssa(v.a, v.b); got != v.mod { t.Errorf("mod_uint32 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod) } } if got := mul_uint32_ssa(v.a, v.b); got != v.mul { t.Errorf("mul_uint32 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul) } } for _, v := range int32_data { if got := add_int32_ssa(v.a, v.b); got != v.add { t.Errorf("add_int32 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add) } if got := sub_int32_ssa(v.a, v.b); got != v.sub { t.Errorf("sub_int32 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub) } if v.b != 0 { if got := div_int32_ssa(v.a, v.b); got != v.div { t.Errorf("div_int32 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div) } } if v.b != 0 { if got := mod_int32_ssa(v.a, v.b); got != v.mod { t.Errorf("mod_int32 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod) } } if got := mul_int32_ssa(v.a, v.b); got != v.mul { t.Errorf("mul_int32 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul) } } for _, v := range uint16_data { if got := add_uint16_ssa(v.a, v.b); got != v.add { t.Errorf("add_uint16 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add) } if got := sub_uint16_ssa(v.a, v.b); got != v.sub { t.Errorf("sub_uint16 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub) } if v.b != 0 { if got := div_uint16_ssa(v.a, v.b); got != v.div { t.Errorf("div_uint16 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div) } } if v.b != 0 { if got := mod_uint16_ssa(v.a, v.b); got != v.mod { t.Errorf("mod_uint16 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod) } } if got := mul_uint16_ssa(v.a, v.b); got != v.mul { t.Errorf("mul_uint16 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul) } } for _, v := range int16_data { if got := add_int16_ssa(v.a, v.b); got != v.add { t.Errorf("add_int16 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add) } if got := sub_int16_ssa(v.a, v.b); got != v.sub { t.Errorf("sub_int16 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub) } if v.b != 0 { if got := div_int16_ssa(v.a, v.b); got != v.div { t.Errorf("div_int16 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div) } } if v.b != 0 { if got := mod_int16_ssa(v.a, v.b); got != v.mod { t.Errorf("mod_int16 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod) } } if got := mul_int16_ssa(v.a, v.b); got != v.mul { t.Errorf("mul_int16 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul) } } for _, v := range uint8_data { if got := add_uint8_ssa(v.a, v.b); got != v.add { t.Errorf("add_uint8 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add) } if got := sub_uint8_ssa(v.a, v.b); got != v.sub { t.Errorf("sub_uint8 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub) } if v.b != 0 { if got := div_uint8_ssa(v.a, v.b); got != v.div { t.Errorf("div_uint8 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div) } } if v.b != 0 { if got := mod_uint8_ssa(v.a, v.b); got != v.mod { t.Errorf("mod_uint8 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod) } } if got := mul_uint8_ssa(v.a, v.b); got != v.mul { t.Errorf("mul_uint8 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul) } } for _, v := range int8_data { if got := add_int8_ssa(v.a, v.b); got != v.add { t.Errorf("add_int8 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add) } if got := sub_int8_ssa(v.a, v.b); got != v.sub { t.Errorf("sub_int8 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub) } if v.b != 0 { if got := div_int8_ssa(v.a, v.b); got != v.div { t.Errorf("div_int8 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div) } } if v.b != 0 { if got := mod_int8_ssa(v.a, v.b); got != v.mod { t.Errorf("mod_int8 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod) } } if got := mul_int8_ssa(v.a, v.b); got != v.mul { t.Errorf("mul_int8 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul) } } } PK ! ƙYZ� � testdata/break_test.gonu �[��� // Copyright 2015 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. // Tests continue and break. package main import "testing" func continuePlain_ssa() int { var n int for i := 0; i < 10; i++ { if i == 6 { continue } n = i } return n } func continueLabeled_ssa() int { var n int Next: for i := 0; i < 10; i++ { if i == 6 { continue Next } n = i } return n } func continuePlainInner_ssa() int { var n int for j := 0; j < 30; j += 10 { for i := 0; i < 10; i++ { if i == 6 { continue } n = i } n += j } return n } func continueLabeledInner_ssa() int { var n int for j := 0; j < 30; j += 10 { Next: for i := 0; i < 10; i++ { if i == 6 { continue Next } n = i } n += j } return n } func continueLabeledOuter_ssa() int { var n int Next: for j := 0; j < 30; j += 10 { for i := 0; i < 10; i++ { if i == 6 { continue Next } n = i } n += j } return n } func breakPlain_ssa() int { var n int for i := 0; i < 10; i++ { if i == 6 { break } n = i } return n } func breakLabeled_ssa() int { var n int Next: for i := 0; i < 10; i++ { if i == 6 { break Next } n = i } return n } func breakPlainInner_ssa() int { var n int for j := 0; j < 30; j += 10 { for i := 0; i < 10; i++ { if i == 6 { break } n = i } n += j } return n } func breakLabeledInner_ssa() int { var n int for j := 0; j < 30; j += 10 { Next: for i := 0; i < 10; i++ { if i == 6 { break Next } n = i } n += j } return n } func breakLabeledOuter_ssa() int { var n int Next: for j := 0; j < 30; j += 10 { for i := 0; i < 10; i++ { if i == 6 { break Next } n = i } n += j } return n } var g, h int // globals to ensure optimizations don't collapse our switch statements func switchPlain_ssa() int { var n int switch g { case 0: n = 1 break n = 2 } return n } func switchLabeled_ssa() int { var n int Done: switch g { case 0: n = 1 break Done n = 2 } return n } func switchPlainInner_ssa() int { var n int switch g { case 0: n = 1 switch h { case 0: n += 10 break } n = 2 } return n } func switchLabeledInner_ssa() int { var n int switch g { case 0: n = 1 Done: switch h { case 0: n += 10 break Done } n = 2 } return n } func switchLabeledOuter_ssa() int { var n int Done: switch g { case 0: n = 1 switch h { case 0: n += 10 break Done } n = 2 } return n } // TestBreakContinue tests that continue and break statements do what they say. func TestBreakContinue(t *testing.T) { tests := [...]struct { name string fn func() int want int }{ {"continuePlain_ssa", continuePlain_ssa, 9}, {"continueLabeled_ssa", continueLabeled_ssa, 9}, {"continuePlainInner_ssa", continuePlainInner_ssa, 29}, {"continueLabeledInner_ssa", continueLabeledInner_ssa, 29}, {"continueLabeledOuter_ssa", continueLabeledOuter_ssa, 5}, {"breakPlain_ssa", breakPlain_ssa, 5}, {"breakLabeled_ssa", breakLabeled_ssa, 5}, {"breakPlainInner_ssa", breakPlainInner_ssa, 25}, {"breakLabeledInner_ssa", breakLabeledInner_ssa, 25}, {"breakLabeledOuter_ssa", breakLabeledOuter_ssa, 5}, {"switchPlain_ssa", switchPlain_ssa, 1}, {"switchLabeled_ssa", switchLabeled_ssa, 1}, {"switchPlainInner_ssa", switchPlainInner_ssa, 2}, {"switchLabeledInner_ssa", switchLabeledInner_ssa, 2}, {"switchLabeledOuter_ssa", switchLabeledOuter_ssa, 11}, // no select tests; they're identical to switch } for _, test := range tests { if got := test.fn(); got != test.want { t.Errorf("%s()=%d, want %d", test.name, got, test.want) } } } PK ! V�^) ) testdata/assert_test.gonu �[��� // Copyright 2015 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. // Tests type assertion expressions and statements package main import ( "runtime" "testing" ) type ( S struct{} U struct{} I interface { F() } ) var ( s *S u *U ) func (s *S) F() {} func (u *U) F() {} func e2t_ssa(e interface{}) *U { return e.(*U) } func i2t_ssa(i I) *U { return i.(*U) } func testAssertE2TOk(t *testing.T) { if got := e2t_ssa(u); got != u { t.Errorf("e2t_ssa(u)=%v want %v", got, u) } } func testAssertE2TPanic(t *testing.T) { var got *U defer func() { if got != nil { t.Errorf("e2t_ssa(s)=%v want nil", got) } e := recover() err, ok := e.(*runtime.TypeAssertionError) if !ok { t.Errorf("e2t_ssa(s) panic type %T", e) } want := "interface conversion: interface {} is *main.S, not *main.U" if err.Error() != want { t.Errorf("e2t_ssa(s) wrong error, want '%s', got '%s'", want, err.Error()) } }() got = e2t_ssa(s) t.Errorf("e2t_ssa(s) should panic") } func testAssertI2TOk(t *testing.T) { if got := i2t_ssa(u); got != u { t.Errorf("i2t_ssa(u)=%v want %v", got, u) } } func testAssertI2TPanic(t *testing.T) { var got *U defer func() { if got != nil { t.Errorf("i2t_ssa(s)=%v want nil", got) } e := recover() err, ok := e.(*runtime.TypeAssertionError) if !ok { t.Errorf("i2t_ssa(s) panic type %T", e) } want := "interface conversion: main.I is *main.S, not *main.U" if err.Error() != want { t.Errorf("i2t_ssa(s) wrong error, want '%s', got '%s'", want, err.Error()) } }() got = i2t_ssa(s) t.Errorf("i2t_ssa(s) should panic") } func e2t2_ssa(e interface{}) (*U, bool) { u, ok := e.(*U) return u, ok } func i2t2_ssa(i I) (*U, bool) { u, ok := i.(*U) return u, ok } func testAssertE2T2(t *testing.T) { if got, ok := e2t2_ssa(u); !ok || got != u { t.Errorf("e2t2_ssa(u)=(%v, %v) want (%v, %v)", got, ok, u, true) } if got, ok := e2t2_ssa(s); ok || got != nil { t.Errorf("e2t2_ssa(s)=(%v, %v) want (%v, %v)", got, ok, nil, false) } } func testAssertI2T2(t *testing.T) { if got, ok := i2t2_ssa(u); !ok || got != u { t.Errorf("i2t2_ssa(u)=(%v, %v) want (%v, %v)", got, ok, u, true) } if got, ok := i2t2_ssa(s); ok || got != nil { t.Errorf("i2t2_ssa(s)=(%v, %v) want (%v, %v)", got, ok, nil, false) } } // TestTypeAssertion tests type assertions. func TestTypeAssertion(t *testing.T) { testAssertE2TOk(t) testAssertE2TPanic(t) testAssertI2TOk(t) testAssertI2TPanic(t) testAssertE2T2(t) testAssertI2T2(t) } PK ! 1@ڍ*� *� testdata/arith_test.gonu �[��� // Copyright 2015 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. // Tests arithmetic expressions package main import ( "math" "runtime" "testing" ) const ( y = 0x0fffFFFF ) var ( g8 int8 g16 int16 g32 int32 g64 int64 ) //go:noinline func lshNop1(x uint64) uint64 { // two outer shifts should be removed return (((x << 5) >> 2) << 2) } //go:noinline func lshNop2(x uint64) uint64 { return (((x << 5) >> 2) << 3) } //go:noinline func lshNop3(x uint64) uint64 { return (((x << 5) >> 2) << 6) } //go:noinline func lshNotNop(x uint64) uint64 { // outer shift can't be removed return (((x << 5) >> 2) << 1) } //go:noinline func rshNop1(x uint64) uint64 { return (((x >> 5) << 2) >> 2) } //go:noinline func rshNop2(x uint64) uint64 { return (((x >> 5) << 2) >> 3) } //go:noinline func rshNop3(x uint64) uint64 { return (((x >> 5) << 2) >> 6) } //go:noinline func rshNotNop(x uint64) uint64 { return (((x >> 5) << 2) >> 1) } func testShiftRemoval(t *testing.T) { allSet := ^uint64(0) if want, got := uint64(0x7ffffffffffffff), rshNop1(allSet); want != got { t.Errorf("testShiftRemoval rshNop1 failed, wanted %d got %d", want, got) } if want, got := uint64(0x3ffffffffffffff), rshNop2(allSet); want != got { t.Errorf("testShiftRemoval rshNop2 failed, wanted %d got %d", want, got) } if want, got := uint64(0x7fffffffffffff), rshNop3(allSet); want != got { t.Errorf("testShiftRemoval rshNop3 failed, wanted %d got %d", want, got) } if want, got := uint64(0xffffffffffffffe), rshNotNop(allSet); want != got { t.Errorf("testShiftRemoval rshNotNop failed, wanted %d got %d", want, got) } if want, got := uint64(0xffffffffffffffe0), lshNop1(allSet); want != got { t.Errorf("testShiftRemoval lshNop1 failed, wanted %d got %d", want, got) } if want, got := uint64(0xffffffffffffffc0), lshNop2(allSet); want != got { t.Errorf("testShiftRemoval lshNop2 failed, wanted %d got %d", want, got) } if want, got := uint64(0xfffffffffffffe00), lshNop3(allSet); want != got { t.Errorf("testShiftRemoval lshNop3 failed, wanted %d got %d", want, got) } if want, got := uint64(0x7ffffffffffffff0), lshNotNop(allSet); want != got { t.Errorf("testShiftRemoval lshNotNop failed, wanted %d got %d", want, got) } } //go:noinline func parseLE64(b []byte) uint64 { // skip the first two bytes, and parse the remaining 8 as a uint64 return uint64(b[2]) | uint64(b[3])<<8 | uint64(b[4])<<16 | uint64(b[5])<<24 | uint64(b[6])<<32 | uint64(b[7])<<40 | uint64(b[8])<<48 | uint64(b[9])<<56 } //go:noinline func parseLE32(b []byte) uint32 { return uint32(b[2]) | uint32(b[3])<<8 | uint32(b[4])<<16 | uint32(b[5])<<24 } //go:noinline func parseLE16(b []byte) uint16 { return uint16(b[2]) | uint16(b[3])<<8 } // testLoadCombine tests for issue #14694 where load combining didn't respect the pointer offset. func testLoadCombine(t *testing.T) { testData := []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09} if want, got := uint64(0x0908070605040302), parseLE64(testData); want != got { t.Errorf("testLoadCombine failed, wanted %d got %d", want, got) } if want, got := uint32(0x05040302), parseLE32(testData); want != got { t.Errorf("testLoadCombine failed, wanted %d got %d", want, got) } if want, got := uint16(0x0302), parseLE16(testData); want != got { t.Errorf("testLoadCombine failed, wanted %d got %d", want, got) } } var loadSymData = [...]byte{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08} func testLoadSymCombine(t *testing.T) { w2 := uint16(0x0201) g2 := uint16(loadSymData[0]) | uint16(loadSymData[1])<<8 if g2 != w2 { t.Errorf("testLoadSymCombine failed, wanted %d got %d", w2, g2) } w4 := uint32(0x04030201) g4 := uint32(loadSymData[0]) | uint32(loadSymData[1])<<8 | uint32(loadSymData[2])<<16 | uint32(loadSymData[3])<<24 if g4 != w4 { t.Errorf("testLoadSymCombine failed, wanted %d got %d", w4, g4) } w8 := uint64(0x0807060504030201) g8 := uint64(loadSymData[0]) | uint64(loadSymData[1])<<8 | uint64(loadSymData[2])<<16 | uint64(loadSymData[3])<<24 | uint64(loadSymData[4])<<32 | uint64(loadSymData[5])<<40 | uint64(loadSymData[6])<<48 | uint64(loadSymData[7])<<56 if g8 != w8 { t.Errorf("testLoadSymCombine failed, wanted %d got %d", w8, g8) } } //go:noinline func invalidAdd_ssa(x uint32) uint32 { return x + y + y + y + y + y + y + y + y + y + y + y + y + y + y + y + y + y } //go:noinline func invalidSub_ssa(x uint32) uint32 { return x - y - y - y - y - y - y - y - y - y - y - y - y - y - y - y - y - y } //go:noinline func invalidMul_ssa(x uint32) uint32 { return x * y * y * y * y * y * y * y * y * y * y * y * y * y * y * y * y * y } // testLargeConst tests a situation where larger than 32 bit consts were passed to ADDL // causing an invalid instruction error. func testLargeConst(t *testing.T) { if want, got := uint32(268435440), invalidAdd_ssa(1); want != got { t.Errorf("testLargeConst add failed, wanted %d got %d", want, got) } if want, got := uint32(4026531858), invalidSub_ssa(1); want != got { t.Errorf("testLargeConst sub failed, wanted %d got %d", want, got) } if want, got := uint32(268435455), invalidMul_ssa(1); want != got { t.Errorf("testLargeConst mul failed, wanted %d got %d", want, got) } } // testArithRshConst ensures that "const >> const" right shifts correctly perform // sign extension on the lhs constant func testArithRshConst(t *testing.T) { wantu := uint64(0x4000000000000000) if got := arithRshuConst_ssa(); got != wantu { t.Errorf("arithRshuConst failed, wanted %d got %d", wantu, got) } wants := int64(-0x4000000000000000) if got := arithRshConst_ssa(); got != wants { t.Errorf("arithRshConst failed, wanted %d got %d", wants, got) } } //go:noinline func arithRshuConst_ssa() uint64 { y := uint64(0x8000000000000001) z := uint64(1) return uint64(y >> z) } //go:noinline func arithRshConst_ssa() int64 { y := int64(-0x8000000000000000) z := uint64(1) return int64(y >> z) } //go:noinline func arithConstShift_ssa(x int64) int64 { return x >> 100 } // testArithConstShift tests that right shift by large constants preserve // the sign of the input. func testArithConstShift(t *testing.T) { want := int64(-1) if got := arithConstShift_ssa(-1); want != got { t.Errorf("arithConstShift_ssa(-1) failed, wanted %d got %d", want, got) } want = 0 if got := arithConstShift_ssa(1); want != got { t.Errorf("arithConstShift_ssa(1) failed, wanted %d got %d", want, got) } } // overflowConstShift_ssa verifies that constant folding for shift // doesn't wrap (i.e. x << MAX_INT << 1 doesn't get folded to x << 0). // //go:noinline func overflowConstShift64_ssa(x int64) int64 { return x << uint64(0xffffffffffffffff) << uint64(1) } //go:noinline func overflowConstShift32_ssa(x int64) int32 { return int32(x) << uint32(0xffffffff) << uint32(1) } //go:noinline func overflowConstShift16_ssa(x int64) int16 { return int16(x) << uint16(0xffff) << uint16(1) } //go:noinline func overflowConstShift8_ssa(x int64) int8 { return int8(x) << uint8(0xff) << uint8(1) } func testOverflowConstShift(t *testing.T) { want := int64(0) for x := int64(-127); x < int64(127); x++ { got := overflowConstShift64_ssa(x) if want != got { t.Errorf("overflowShift64 failed, wanted %d got %d", want, got) } got = int64(overflowConstShift32_ssa(x)) if want != got { t.Errorf("overflowShift32 failed, wanted %d got %d", want, got) } got = int64(overflowConstShift16_ssa(x)) if want != got { t.Errorf("overflowShift16 failed, wanted %d got %d", want, got) } got = int64(overflowConstShift8_ssa(x)) if want != got { t.Errorf("overflowShift8 failed, wanted %d got %d", want, got) } } } //go:noinline func rsh64x64ConstOverflow8(x int8) int64 { return int64(x) >> 9 } //go:noinline func rsh64x64ConstOverflow16(x int16) int64 { return int64(x) >> 17 } //go:noinline func rsh64x64ConstOverflow32(x int32) int64 { return int64(x) >> 33 } func testArithRightShiftConstOverflow(t *testing.T) { allSet := int64(-1) if got, want := rsh64x64ConstOverflow8(0x7f), int64(0); got != want { t.Errorf("rsh64x64ConstOverflow8 failed: got %v, want %v", got, want) } if got, want := rsh64x64ConstOverflow16(0x7fff), int64(0); got != want { t.Errorf("rsh64x64ConstOverflow16 failed: got %v, want %v", got, want) } if got, want := rsh64x64ConstOverflow32(0x7ffffff), int64(0); got != want { t.Errorf("rsh64x64ConstOverflow32 failed: got %v, want %v", got, want) } if got, want := rsh64x64ConstOverflow8(int8(-1)), allSet; got != want { t.Errorf("rsh64x64ConstOverflow8 failed: got %v, want %v", got, want) } if got, want := rsh64x64ConstOverflow16(int16(-1)), allSet; got != want { t.Errorf("rsh64x64ConstOverflow16 failed: got %v, want %v", got, want) } if got, want := rsh64x64ConstOverflow32(int32(-1)), allSet; got != want { t.Errorf("rsh64x64ConstOverflow32 failed: got %v, want %v", got, want) } } //go:noinline func rsh64Ux64ConstOverflow8(x uint8) uint64 { return uint64(x) >> 9 } //go:noinline func rsh64Ux64ConstOverflow16(x uint16) uint64 { return uint64(x) >> 17 } //go:noinline func rsh64Ux64ConstOverflow32(x uint32) uint64 { return uint64(x) >> 33 } func testRightShiftConstOverflow(t *testing.T) { if got, want := rsh64Ux64ConstOverflow8(0xff), uint64(0); got != want { t.Errorf("rsh64Ux64ConstOverflow8 failed: got %v, want %v", got, want) } if got, want := rsh64Ux64ConstOverflow16(0xffff), uint64(0); got != want { t.Errorf("rsh64Ux64ConstOverflow16 failed: got %v, want %v", got, want) } if got, want := rsh64Ux64ConstOverflow32(0xffffffff), uint64(0); got != want { t.Errorf("rsh64Ux64ConstOverflow32 failed: got %v, want %v", got, want) } } // test64BitConstMult tests that rewrite rules don't fold 64 bit constants // into multiply instructions. func test64BitConstMult(t *testing.T) { want := int64(103079215109) if got := test64BitConstMult_ssa(1, 2); want != got { t.Errorf("test64BitConstMult failed, wanted %d got %d", want, got) } } //go:noinline func test64BitConstMult_ssa(a, b int64) int64 { return 34359738369*a + b*34359738370 } // test64BitConstAdd tests that rewrite rules don't fold 64 bit constants // into add instructions. func test64BitConstAdd(t *testing.T) { want := int64(3567671782835376650) if got := test64BitConstAdd_ssa(1, 2); want != got { t.Errorf("test64BitConstAdd failed, wanted %d got %d", want, got) } } //go:noinline func test64BitConstAdd_ssa(a, b int64) int64 { return a + 575815584948629622 + b + 2991856197886747025 } // testRegallocCVSpill tests that regalloc spills a value whose last use is the // current value. func testRegallocCVSpill(t *testing.T) { want := int8(-9) if got := testRegallocCVSpill_ssa(1, 2, 3, 4); want != got { t.Errorf("testRegallocCVSpill failed, wanted %d got %d", want, got) } } //go:noinline func testRegallocCVSpill_ssa(a, b, c, d int8) int8 { return a + -32 + b + 63*c*-87*d } func testBitwiseLogic(t *testing.T) { a, b := uint32(57623283), uint32(1314713839) if want, got := uint32(38551779), testBitwiseAnd_ssa(a, b); want != got { t.Errorf("testBitwiseAnd failed, wanted %d got %d", want, got) } if want, got := uint32(1333785343), testBitwiseOr_ssa(a, b); want != got { t.Errorf("testBitwiseOr failed, wanted %d got %d", want, got) } if want, got := uint32(1295233564), testBitwiseXor_ssa(a, b); want != got { t.Errorf("testBitwiseXor failed, wanted %d got %d", want, got) } if want, got := int32(832), testBitwiseLsh_ssa(13, 4, 2); want != got { t.Errorf("testBitwiseLsh failed, wanted %d got %d", want, got) } if want, got := int32(0), testBitwiseLsh_ssa(13, 25, 15); want != got { t.Errorf("testBitwiseLsh failed, wanted %d got %d", want, got) } if want, got := int32(0), testBitwiseLsh_ssa(-13, 25, 15); want != got { t.Errorf("testBitwiseLsh failed, wanted %d got %d", want, got) } if want, got := int32(-13), testBitwiseRsh_ssa(-832, 4, 2); want != got { t.Errorf("testBitwiseRsh failed, wanted %d got %d", want, got) } if want, got := int32(0), testBitwiseRsh_ssa(13, 25, 15); want != got { t.Errorf("testBitwiseRsh failed, wanted %d got %d", want, got) } if want, got := int32(-1), testBitwiseRsh_ssa(-13, 25, 15); want != got { t.Errorf("testBitwiseRsh failed, wanted %d got %d", want, got) } if want, got := uint32(0x3ffffff), testBitwiseRshU_ssa(0xffffffff, 4, 2); want != got { t.Errorf("testBitwiseRshU failed, wanted %d got %d", want, got) } if want, got := uint32(0), testBitwiseRshU_ssa(13, 25, 15); want != got { t.Errorf("testBitwiseRshU failed, wanted %d got %d", want, got) } if want, got := uint32(0), testBitwiseRshU_ssa(0x8aaaaaaa, 25, 15); want != got { t.Errorf("testBitwiseRshU failed, wanted %d got %d", want, got) } } //go:noinline func testBitwiseAnd_ssa(a, b uint32) uint32 { return a & b } //go:noinline func testBitwiseOr_ssa(a, b uint32) uint32 { return a | b } //go:noinline func testBitwiseXor_ssa(a, b uint32) uint32 { return a ^ b } //go:noinline func testBitwiseLsh_ssa(a int32, b, c uint32) int32 { return a << b << c } //go:noinline func testBitwiseRsh_ssa(a int32, b, c uint32) int32 { return a >> b >> c } //go:noinline func testBitwiseRshU_ssa(a uint32, b, c uint32) uint32 { return a >> b >> c } //go:noinline func testShiftCX_ssa() int { v1 := uint8(3) v4 := (v1 * v1) ^ v1 | v1 - v1 - v1&v1 ^ uint8(3+2) + v1*1>>0 - v1 | 1 | v1<<(2*3|0-0*0^1) v5 := v4>>(3-0-uint(3)) | v1 | v1 + v1 ^ v4<<(0+1|3&1)<<(uint64(1)<<0*2*0<<0) ^ v1 v6 := v5 ^ (v1+v1)*v1 | v1 | v1*v1>>(v1&v1)>>(uint(1)<<0*uint(3)>>1)*v1<<2*v1<<v1 - v1>>2 | (v4 - v1) ^ v1 + v1 ^ v1>>1 | v1 + v1 - v1 ^ v1 v7 := v6 & v5 << 0 v1++ v11 := 2&1 ^ 0 + 3 | int(0^0)<<1>>(1*0*3) ^ 0*0 ^ 3&0*3&3 ^ 3*3 ^ 1 ^ int(2)<<(2*3) + 2 | 2 | 2 ^ 2 + 1 | 3 | 0 ^ int(1)>>1 ^ 2 // int v7-- return int(uint64(2*1)<<(3-2)<<uint(3>>v7)-2)&v11 | v11 - int(2)<<0>>(2-1)*(v11*0&v11<<1<<(uint8(2)+v4)) } func testShiftCX(t *testing.T) { want := 141 if got := testShiftCX_ssa(); want != got { t.Errorf("testShiftCX failed, wanted %d got %d", want, got) } } // testSubqToNegq ensures that the SUBQ -> NEGQ translation works correctly. func testSubqToNegq(t *testing.T) { want := int64(-318294940372190156) if got := testSubqToNegq_ssa(1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2); want != got { t.Errorf("testSubqToNegq failed, wanted %d got %d", want, got) } } //go:noinline func testSubqToNegq_ssa(a, b, c, d, e, f, g, h, i, j, k int64) int64 { return a + 8207351403619448057 - b - 1779494519303207690 + c*8810076340510052032*d - 4465874067674546219 - e*4361839741470334295 - f + 8688847565426072650*g*8065564729145417479 } func testOcom(t *testing.T) { want1, want2 := int32(0x55555555), int32(-0x55555556) if got1, got2 := testOcom_ssa(0x55555555, 0x55555555); want1 != got1 || want2 != got2 { t.Errorf("testOcom failed, wanted %d and %d got %d and %d", want1, want2, got1, got2) } } //go:noinline func testOcom_ssa(a, b int32) (int32, int32) { return ^^^^a, ^^^^^b } func lrot1_ssa(w uint8, x uint16, y uint32, z uint64) (a uint8, b uint16, c uint32, d uint64) { a = (w << 5) | (w >> 3) b = (x << 13) | (x >> 3) c = (y << 29) | (y >> 3) d = (z << 61) | (z >> 3) return } //go:noinline func lrot2_ssa(w, n uint32) uint32 { // Want to be sure that a "rotate by 32" which // is really 0 | (w >> 0) == w // is correctly compiled. return (w << n) | (w >> (32 - n)) } //go:noinline func lrot3_ssa(w uint32) uint32 { // Want to be sure that a "rotate by 32" which // is really 0 | (w >> 0) == w // is correctly compiled. return (w << 32) | (w >> (32 - 32)) } func testLrot(t *testing.T) { wantA, wantB, wantC, wantD := uint8(0xe1), uint16(0xe001), uint32(0xe0000001), uint64(0xe000000000000001) a, b, c, d := lrot1_ssa(0xf, 0xf, 0xf, 0xf) if a != wantA || b != wantB || c != wantC || d != wantD { t.Errorf("lrot1_ssa(0xf, 0xf, 0xf, 0xf)=%d %d %d %d, got %d %d %d %d", wantA, wantB, wantC, wantD, a, b, c, d) } x := lrot2_ssa(0xb0000001, 32) wantX := uint32(0xb0000001) if x != wantX { t.Errorf("lrot2_ssa(0xb0000001, 32)=%d, got %d", wantX, x) } x = lrot3_ssa(0xb0000001) if x != wantX { t.Errorf("lrot3_ssa(0xb0000001)=%d, got %d", wantX, x) } } //go:noinline func sub1_ssa() uint64 { v1 := uint64(3) // uint64 return v1*v1 - (v1&v1)&v1 } //go:noinline func sub2_ssa() uint8 { v1 := uint8(0) v3 := v1 + v1 + v1 ^ v1 | 3 + v1 ^ v1 | v1 ^ v1 v1-- // dev.ssa doesn't see this one return v1 ^ v1*v1 - v3 } func testSubConst(t *testing.T) { x1 := sub1_ssa() want1 := uint64(6) if x1 != want1 { t.Errorf("sub1_ssa()=%d, got %d", want1, x1) } x2 := sub2_ssa() want2 := uint8(251) if x2 != want2 { t.Errorf("sub2_ssa()=%d, got %d", want2, x2) } } //go:noinline func orPhi_ssa(a bool, x int) int { v := 0 if a { v = -1 } else { v = -1 } return x | v } func testOrPhi(t *testing.T) { if want, got := -1, orPhi_ssa(true, 4); got != want { t.Errorf("orPhi_ssa(true, 4)=%d, want %d", got, want) } if want, got := -1, orPhi_ssa(false, 0); got != want { t.Errorf("orPhi_ssa(false, 0)=%d, want %d", got, want) } } //go:noinline func addshiftLL_ssa(a, b uint32) uint32 { return a + b<<3 } //go:noinline func subshiftLL_ssa(a, b uint32) uint32 { return a - b<<3 } //go:noinline func rsbshiftLL_ssa(a, b uint32) uint32 { return a<<3 - b } //go:noinline func andshiftLL_ssa(a, b uint32) uint32 { return a & (b << 3) } //go:noinline func orshiftLL_ssa(a, b uint32) uint32 { return a | b<<3 } //go:noinline func xorshiftLL_ssa(a, b uint32) uint32 { return a ^ b<<3 } //go:noinline func bicshiftLL_ssa(a, b uint32) uint32 { return a &^ (b << 3) } //go:noinline func notshiftLL_ssa(a uint32) uint32 { return ^(a << 3) } //go:noinline func addshiftRL_ssa(a, b uint32) uint32 { return a + b>>3 } //go:noinline func subshiftRL_ssa(a, b uint32) uint32 { return a - b>>3 } //go:noinline func rsbshiftRL_ssa(a, b uint32) uint32 { return a>>3 - b } //go:noinline func andshiftRL_ssa(a, b uint32) uint32 { return a & (b >> 3) } //go:noinline func orshiftRL_ssa(a, b uint32) uint32 { return a | b>>3 } //go:noinline func xorshiftRL_ssa(a, b uint32) uint32 { return a ^ b>>3 } //go:noinline func bicshiftRL_ssa(a, b uint32) uint32 { return a &^ (b >> 3) } //go:noinline func notshiftRL_ssa(a uint32) uint32 { return ^(a >> 3) } //go:noinline func addshiftRA_ssa(a, b int32) int32 { return a + b>>3 } //go:noinline func subshiftRA_ssa(a, b int32) int32 { return a - b>>3 } //go:noinline func rsbshiftRA_ssa(a, b int32) int32 { return a>>3 - b } //go:noinline func andshiftRA_ssa(a, b int32) int32 { return a & (b >> 3) } //go:noinline func orshiftRA_ssa(a, b int32) int32 { return a | b>>3 } //go:noinline func xorshiftRA_ssa(a, b int32) int32 { return a ^ b>>3 } //go:noinline func bicshiftRA_ssa(a, b int32) int32 { return a &^ (b >> 3) } //go:noinline func notshiftRA_ssa(a int32) int32 { return ^(a >> 3) } //go:noinline func addshiftLLreg_ssa(a, b uint32, s uint8) uint32 { return a + b<<s } //go:noinline func subshiftLLreg_ssa(a, b uint32, s uint8) uint32 { return a - b<<s } //go:noinline func rsbshiftLLreg_ssa(a, b uint32, s uint8) uint32 { return a<<s - b } //go:noinline func andshiftLLreg_ssa(a, b uint32, s uint8) uint32 { return a & (b << s) } //go:noinline func orshiftLLreg_ssa(a, b uint32, s uint8) uint32 { return a | b<<s } //go:noinline func xorshiftLLreg_ssa(a, b uint32, s uint8) uint32 { return a ^ b<<s } //go:noinline func bicshiftLLreg_ssa(a, b uint32, s uint8) uint32 { return a &^ (b << s) } //go:noinline func notshiftLLreg_ssa(a uint32, s uint8) uint32 { return ^(a << s) } //go:noinline func addshiftRLreg_ssa(a, b uint32, s uint8) uint32 { return a + b>>s } //go:noinline func subshiftRLreg_ssa(a, b uint32, s uint8) uint32 { return a - b>>s } //go:noinline func rsbshiftRLreg_ssa(a, b uint32, s uint8) uint32 { return a>>s - b } //go:noinline func andshiftRLreg_ssa(a, b uint32, s uint8) uint32 { return a & (b >> s) } //go:noinline func orshiftRLreg_ssa(a, b uint32, s uint8) uint32 { return a | b>>s } //go:noinline func xorshiftRLreg_ssa(a, b uint32, s uint8) uint32 { return a ^ b>>s } //go:noinline func bicshiftRLreg_ssa(a, b uint32, s uint8) uint32 { return a &^ (b >> s) } //go:noinline func notshiftRLreg_ssa(a uint32, s uint8) uint32 { return ^(a >> s) } //go:noinline func addshiftRAreg_ssa(a, b int32, s uint8) int32 { return a + b>>s } //go:noinline func subshiftRAreg_ssa(a, b int32, s uint8) int32 { return a - b>>s } //go:noinline func rsbshiftRAreg_ssa(a, b int32, s uint8) int32 { return a>>s - b } //go:noinline func andshiftRAreg_ssa(a, b int32, s uint8) int32 { return a & (b >> s) } //go:noinline func orshiftRAreg_ssa(a, b int32, s uint8) int32 { return a | b>>s } //go:noinline func xorshiftRAreg_ssa(a, b int32, s uint8) int32 { return a ^ b>>s } //go:noinline func bicshiftRAreg_ssa(a, b int32, s uint8) int32 { return a &^ (b >> s) } //go:noinline func notshiftRAreg_ssa(a int32, s uint8) int32 { return ^(a >> s) } // test ARM shifted ops func testShiftedOps(t *testing.T) { a, b := uint32(10), uint32(42) if want, got := a+b<<3, addshiftLL_ssa(a, b); got != want { t.Errorf("addshiftLL_ssa(10, 42) = %d want %d", got, want) } if want, got := a-b<<3, subshiftLL_ssa(a, b); got != want { t.Errorf("subshiftLL_ssa(10, 42) = %d want %d", got, want) } if want, got := a<<3-b, rsbshiftLL_ssa(a, b); got != want { t.Errorf("rsbshiftLL_ssa(10, 42) = %d want %d", got, want) } if want, got := a&(b<<3), andshiftLL_ssa(a, b); got != want { t.Errorf("andshiftLL_ssa(10, 42) = %d want %d", got, want) } if want, got := a|b<<3, orshiftLL_ssa(a, b); got != want { t.Errorf("orshiftLL_ssa(10, 42) = %d want %d", got, want) } if want, got := a^b<<3, xorshiftLL_ssa(a, b); got != want { t.Errorf("xorshiftLL_ssa(10, 42) = %d want %d", got, want) } if want, got := a&^(b<<3), bicshiftLL_ssa(a, b); got != want { t.Errorf("bicshiftLL_ssa(10, 42) = %d want %d", got, want) } if want, got := ^(a << 3), notshiftLL_ssa(a); got != want { t.Errorf("notshiftLL_ssa(10) = %d want %d", got, want) } if want, got := a+b>>3, addshiftRL_ssa(a, b); got != want { t.Errorf("addshiftRL_ssa(10, 42) = %d want %d", got, want) } if want, got := a-b>>3, subshiftRL_ssa(a, b); got != want { t.Errorf("subshiftRL_ssa(10, 42) = %d want %d", got, want) } if want, got := a>>3-b, rsbshiftRL_ssa(a, b); got != want { t.Errorf("rsbshiftRL_ssa(10, 42) = %d want %d", got, want) } if want, got := a&(b>>3), andshiftRL_ssa(a, b); got != want { t.Errorf("andshiftRL_ssa(10, 42) = %d want %d", got, want) } if want, got := a|b>>3, orshiftRL_ssa(a, b); got != want { t.Errorf("orshiftRL_ssa(10, 42) = %d want %d", got, want) } if want, got := a^b>>3, xorshiftRL_ssa(a, b); got != want { t.Errorf("xorshiftRL_ssa(10, 42) = %d want %d", got, want) } if want, got := a&^(b>>3), bicshiftRL_ssa(a, b); got != want { t.Errorf("bicshiftRL_ssa(10, 42) = %d want %d", got, want) } if want, got := ^(a >> 3), notshiftRL_ssa(a); got != want { t.Errorf("notshiftRL_ssa(10) = %d want %d", got, want) } c, d := int32(10), int32(-42) if want, got := c+d>>3, addshiftRA_ssa(c, d); got != want { t.Errorf("addshiftRA_ssa(10, -42) = %d want %d", got, want) } if want, got := c-d>>3, subshiftRA_ssa(c, d); got != want { t.Errorf("subshiftRA_ssa(10, -42) = %d want %d", got, want) } if want, got := c>>3-d, rsbshiftRA_ssa(c, d); got != want { t.Errorf("rsbshiftRA_ssa(10, -42) = %d want %d", got, want) } if want, got := c&(d>>3), andshiftRA_ssa(c, d); got != want { t.Errorf("andshiftRA_ssa(10, -42) = %d want %d", got, want) } if want, got := c|d>>3, orshiftRA_ssa(c, d); got != want { t.Errorf("orshiftRA_ssa(10, -42) = %d want %d", got, want) } if want, got := c^d>>3, xorshiftRA_ssa(c, d); got != want { t.Errorf("xorshiftRA_ssa(10, -42) = %d want %d", got, want) } if want, got := c&^(d>>3), bicshiftRA_ssa(c, d); got != want { t.Errorf("bicshiftRA_ssa(10, -42) = %d want %d", got, want) } if want, got := ^(d >> 3), notshiftRA_ssa(d); got != want { t.Errorf("notshiftRA_ssa(-42) = %d want %d", got, want) } s := uint8(3) if want, got := a+b<<s, addshiftLLreg_ssa(a, b, s); got != want { t.Errorf("addshiftLLreg_ssa(10, 42, 3) = %d want %d", got, want) } if want, got := a-b<<s, subshiftLLreg_ssa(a, b, s); got != want { t.Errorf("subshiftLLreg_ssa(10, 42, 3) = %d want %d", got, want) } if want, got := a<<s-b, rsbshiftLLreg_ssa(a, b, s); got != want { t.Errorf("rsbshiftLLreg_ssa(10, 42, 3) = %d want %d", got, want) } if want, got := a&(b<<s), andshiftLLreg_ssa(a, b, s); got != want { t.Errorf("andshiftLLreg_ssa(10, 42, 3) = %d want %d", got, want) } if want, got := a|b<<s, orshiftLLreg_ssa(a, b, s); got != want { t.Errorf("orshiftLLreg_ssa(10, 42, 3) = %d want %d", got, want) } if want, got := a^b<<s, xorshiftLLreg_ssa(a, b, s); got != want { t.Errorf("xorshiftLLreg_ssa(10, 42, 3) = %d want %d", got, want) } if want, got := a&^(b<<s), bicshiftLLreg_ssa(a, b, s); got != want { t.Errorf("bicshiftLLreg_ssa(10, 42, 3) = %d want %d", got, want) } if want, got := ^(a << s), notshiftLLreg_ssa(a, s); got != want { t.Errorf("notshiftLLreg_ssa(10) = %d want %d", got, want) } if want, got := a+b>>s, addshiftRLreg_ssa(a, b, s); got != want { t.Errorf("addshiftRLreg_ssa(10, 42, 3) = %d want %d", got, want) } if want, got := a-b>>s, subshiftRLreg_ssa(a, b, s); got != want { t.Errorf("subshiftRLreg_ssa(10, 42, 3) = %d want %d", got, want) } if want, got := a>>s-b, rsbshiftRLreg_ssa(a, b, s); got != want { t.Errorf("rsbshiftRLreg_ssa(10, 42, 3) = %d want %d", got, want) } if want, got := a&(b>>s), andshiftRLreg_ssa(a, b, s); got != want { t.Errorf("andshiftRLreg_ssa(10, 42, 3) = %d want %d", got, want) } if want, got := a|b>>s, orshiftRLreg_ssa(a, b, s); got != want { t.Errorf("orshiftRLreg_ssa(10, 42, 3) = %d want %d", got, want) } if want, got := a^b>>s, xorshiftRLreg_ssa(a, b, s); got != want { t.Errorf("xorshiftRLreg_ssa(10, 42, 3) = %d want %d", got, want) } if want, got := a&^(b>>s), bicshiftRLreg_ssa(a, b, s); got != want { t.Errorf("bicshiftRLreg_ssa(10, 42, 3) = %d want %d", got, want) } if want, got := ^(a >> s), notshiftRLreg_ssa(a, s); got != want { t.Errorf("notshiftRLreg_ssa(10) = %d want %d", got, want) } if want, got := c+d>>s, addshiftRAreg_ssa(c, d, s); got != want { t.Errorf("addshiftRAreg_ssa(10, -42, 3) = %d want %d", got, want) } if want, got := c-d>>s, subshiftRAreg_ssa(c, d, s); got != want { t.Errorf("subshiftRAreg_ssa(10, -42, 3) = %d want %d", got, want) } if want, got := c>>s-d, rsbshiftRAreg_ssa(c, d, s); got != want { t.Errorf("rsbshiftRAreg_ssa(10, -42, 3) = %d want %d", got, want) } if want, got := c&(d>>s), andshiftRAreg_ssa(c, d, s); got != want { t.Errorf("andshiftRAreg_ssa(10, -42, 3) = %d want %d", got, want) } if want, got := c|d>>s, orshiftRAreg_ssa(c, d, s); got != want { t.Errorf("orshiftRAreg_ssa(10, -42, 3) = %d want %d", got, want) } if want, got := c^d>>s, xorshiftRAreg_ssa(c, d, s); got != want { t.Errorf("xorshiftRAreg_ssa(10, -42, 3) = %d want %d", got, want) } if want, got := c&^(d>>s), bicshiftRAreg_ssa(c, d, s); got != want { t.Errorf("bicshiftRAreg_ssa(10, -42, 3) = %d want %d", got, want) } if want, got := ^(d >> s), notshiftRAreg_ssa(d, s); got != want { t.Errorf("notshiftRAreg_ssa(-42, 3) = %d want %d", got, want) } } // TestArithmetic tests that both backends have the same result for arithmetic expressions. func TestArithmetic(t *testing.T) { test64BitConstMult(t) test64BitConstAdd(t) testRegallocCVSpill(t) testSubqToNegq(t) testBitwiseLogic(t) testOcom(t) testLrot(t) testShiftCX(t) testSubConst(t) testOverflowConstShift(t) testArithRightShiftConstOverflow(t) testRightShiftConstOverflow(t) testArithConstShift(t) testArithRshConst(t) testLargeConst(t) testLoadCombine(t) testLoadSymCombine(t) testShiftRemoval(t) testShiftedOps(t) testDivFixUp(t) testDivisibleSignedPow2(t) testDivisibility(t) } // testDivFixUp ensures that signed division fix-ups are being generated. func testDivFixUp(t *testing.T) { defer func() { if r := recover(); r != nil { t.Error("testDivFixUp failed") if e, ok := r.(runtime.Error); ok { t.Logf("%v\n", e.Error()) } } }() var w int8 = -128 var x int16 = -32768 var y int32 = -2147483648 var z int64 = -9223372036854775808 for i := -5; i < 0; i++ { g8 = w / int8(i) g16 = x / int16(i) g32 = y / int32(i) g64 = z / int64(i) g8 = w % int8(i) g16 = x % int16(i) g32 = y % int32(i) g64 = z % int64(i) } } //go:noinline func divisible_int8_2to1(x int8) bool { return x%(1<<1) == 0 } //go:noinline func divisible_int8_2to2(x int8) bool { return x%(1<<2) == 0 } //go:noinline func divisible_int8_2to3(x int8) bool { return x%(1<<3) == 0 } //go:noinline func divisible_int8_2to4(x int8) bool { return x%(1<<4) == 0 } //go:noinline func divisible_int8_2to5(x int8) bool { return x%(1<<5) == 0 } //go:noinline func divisible_int8_2to6(x int8) bool { return x%(1<<6) == 0 } //go:noinline func divisible_int16_2to1(x int16) bool { return x%(1<<1) == 0 } //go:noinline func divisible_int16_2to2(x int16) bool { return x%(1<<2) == 0 } //go:noinline func divisible_int16_2to3(x int16) bool { return x%(1<<3) == 0 } //go:noinline func divisible_int16_2to4(x int16) bool { return x%(1<<4) == 0 } //go:noinline func divisible_int16_2to5(x int16) bool { return x%(1<<5) == 0 } //go:noinline func divisible_int16_2to6(x int16) bool { return x%(1<<6) == 0 } //go:noinline func divisible_int16_2to7(x int16) bool { return x%(1<<7) == 0 } //go:noinline func divisible_int16_2to8(x int16) bool { return x%(1<<8) == 0 } //go:noinline func divisible_int16_2to9(x int16) bool { return x%(1<<9) == 0 } //go:noinline func divisible_int16_2to10(x int16) bool { return x%(1<<10) == 0 } //go:noinline func divisible_int16_2to11(x int16) bool { return x%(1<<11) == 0 } //go:noinline func divisible_int16_2to12(x int16) bool { return x%(1<<12) == 0 } //go:noinline func divisible_int16_2to13(x int16) bool { return x%(1<<13) == 0 } //go:noinline func divisible_int16_2to14(x int16) bool { return x%(1<<14) == 0 } //go:noinline func divisible_int32_2to4(x int32) bool { return x%(1<<4) == 0 } //go:noinline func divisible_int32_2to15(x int32) bool { return x%(1<<15) == 0 } //go:noinline func divisible_int32_2to26(x int32) bool { return x%(1<<26) == 0 } //go:noinline func divisible_int64_2to4(x int64) bool { return x%(1<<4) == 0 } //go:noinline func divisible_int64_2to15(x int64) bool { return x%(1<<15) == 0 } //go:noinline func divisible_int64_2to26(x int64) bool { return x%(1<<26) == 0 } //go:noinline func divisible_int64_2to34(x int64) bool { return x%(1<<34) == 0 } //go:noinline func divisible_int64_2to48(x int64) bool { return x%(1<<48) == 0 } //go:noinline func divisible_int64_2to57(x int64) bool { return x%(1<<57) == 0 } // testDivisibleSignedPow2 confirms that x%(1<<k)==0 is rewritten correctly func testDivisibleSignedPow2(t *testing.T) { var i int64 var pow2 = []int64{ 1, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 1 << 6, 1 << 7, 1 << 8, 1 << 9, 1 << 10, 1 << 11, 1 << 12, 1 << 13, 1 << 14, } // exhaustive test for int8 for i = math.MinInt8; i <= math.MaxInt8; i++ { if want, got := int8(i)%int8(pow2[1]) == 0, divisible_int8_2to1(int8(i)); got != want { t.Errorf("divisible_int8_2to1(%d) = %v want %v", i, got, want) } if want, got := int8(i)%int8(pow2[2]) == 0, divisible_int8_2to2(int8(i)); got != want { t.Errorf("divisible_int8_2to2(%d) = %v want %v", i, got, want) } if want, got := int8(i)%int8(pow2[3]) == 0, divisible_int8_2to3(int8(i)); got != want { t.Errorf("divisible_int8_2to3(%d) = %v want %v", i, got, want) } if want, got := int8(i)%int8(pow2[4]) == 0, divisible_int8_2to4(int8(i)); got != want { t.Errorf("divisible_int8_2to4(%d) = %v want %v", i, got, want) } if want, got := int8(i)%int8(pow2[5]) == 0, divisible_int8_2to5(int8(i)); got != want { t.Errorf("divisible_int8_2to5(%d) = %v want %v", i, got, want) } if want, got := int8(i)%int8(pow2[6]) == 0, divisible_int8_2to6(int8(i)); got != want { t.Errorf("divisible_int8_2to6(%d) = %v want %v", i, got, want) } } // exhaustive test for int16 for i = math.MinInt16; i <= math.MaxInt16; i++ { if want, got := int16(i)%int16(pow2[1]) == 0, divisible_int16_2to1(int16(i)); got != want { t.Errorf("divisible_int16_2to1(%d) = %v want %v", i, got, want) } if want, got := int16(i)%int16(pow2[2]) == 0, divisible_int16_2to2(int16(i)); got != want { t.Errorf("divisible_int16_2to2(%d) = %v want %v", i, got, want) } if want, got := int16(i)%int16(pow2[3]) == 0, divisible_int16_2to3(int16(i)); got != want { t.Errorf("divisible_int16_2to3(%d) = %v want %v", i, got, want) } if want, got := int16(i)%int16(pow2[4]) == 0, divisible_int16_2to4(int16(i)); got != want { t.Errorf("divisible_int16_2to4(%d) = %v want %v", i, got, want) } if want, got := int16(i)%int16(pow2[5]) == 0, divisible_int16_2to5(int16(i)); got != want { t.Errorf("divisible_int16_2to5(%d) = %v want %v", i, got, want) } if want, got := int16(i)%int16(pow2[6]) == 0, divisible_int16_2to6(int16(i)); got != want { t.Errorf("divisible_int16_2to6(%d) = %v want %v", i, got, want) } if want, got := int16(i)%int16(pow2[7]) == 0, divisible_int16_2to7(int16(i)); got != want { t.Errorf("divisible_int16_2to7(%d) = %v want %v", i, got, want) } if want, got := int16(i)%int16(pow2[8]) == 0, divisible_int16_2to8(int16(i)); got != want { t.Errorf("divisible_int16_2to8(%d) = %v want %v", i, got, want) } if want, got := int16(i)%int16(pow2[9]) == 0, divisible_int16_2to9(int16(i)); got != want { t.Errorf("divisible_int16_2to9(%d) = %v want %v", i, got, want) } if want, got := int16(i)%int16(pow2[10]) == 0, divisible_int16_2to10(int16(i)); got != want { t.Errorf("divisible_int16_2to10(%d) = %v want %v", i, got, want) } if want, got := int16(i)%int16(pow2[11]) == 0, divisible_int16_2to11(int16(i)); got != want { t.Errorf("divisible_int16_2to11(%d) = %v want %v", i, got, want) } if want, got := int16(i)%int16(pow2[12]) == 0, divisible_int16_2to12(int16(i)); got != want { t.Errorf("divisible_int16_2to12(%d) = %v want %v", i, got, want) } if want, got := int16(i)%int16(pow2[13]) == 0, divisible_int16_2to13(int16(i)); got != want { t.Errorf("divisible_int16_2to13(%d) = %v want %v", i, got, want) } if want, got := int16(i)%int16(pow2[14]) == 0, divisible_int16_2to14(int16(i)); got != want { t.Errorf("divisible_int16_2to14(%d) = %v want %v", i, got, want) } } // spot check for int32 and int64 var ( two4 int64 = 1 << 4 two15 int64 = 1 << 15 two26 int64 = 1 << 26 two34 int64 = 1 << 34 two48 int64 = 1 << 48 two57 int64 = 1 << 57 ) var xs = []int64{two4, two4 + 3, -3 * two4, -3*two4 + 1, two15, two15 + 3, -3 * two15, -3*two15 + 1, two26, two26 + 37, -5 * two26, -5*two26 + 2, two34, two34 + 356, -7 * two34, -7*two34 + 13, two48, two48 + 3000, -12 * two48, -12*two48 + 1111, two57, two57 + 397654, -15 * two57, -15*two57 + 11234, } for _, x := range xs { if int64(int32(x)) == x { if want, got := int32(x)%int32(two4) == 0, divisible_int32_2to4(int32(x)); got != want { t.Errorf("divisible_int32_2to4(%d) = %v want %v", x, got, want) } if want, got := int32(x)%int32(two15) == 0, divisible_int32_2to15(int32(x)); got != want { t.Errorf("divisible_int32_2to15(%d) = %v want %v", x, got, want) } if want, got := int32(x)%int32(two26) == 0, divisible_int32_2to26(int32(x)); got != want { t.Errorf("divisible_int32_2to26(%d) = %v want %v", x, got, want) } } // spot check for int64 if want, got := x%two4 == 0, divisible_int64_2to4(x); got != want { t.Errorf("divisible_int64_2to4(%d) = %v want %v", x, got, want) } if want, got := x%two15 == 0, divisible_int64_2to15(x); got != want { t.Errorf("divisible_int64_2to15(%d) = %v want %v", x, got, want) } if want, got := x%two26 == 0, divisible_int64_2to26(x); got != want { t.Errorf("divisible_int64_2to26(%d) = %v want %v", x, got, want) } if want, got := x%two34 == 0, divisible_int64_2to34(x); got != want { t.Errorf("divisible_int64_2to34(%d) = %v want %v", x, got, want) } if want, got := x%two48 == 0, divisible_int64_2to48(x); got != want { t.Errorf("divisible_int64_2to48(%d) = %v want %v", x, got, want) } if want, got := x%two57 == 0, divisible_int64_2to57(x); got != want { t.Errorf("divisible_int64_2to57(%d) = %v want %v", x, got, want) } } } func div6_uint8(n uint8) bool { return n%6 == 0 } //go:noinline func div6_uint16(n uint16) bool { return n%6 == 0 } //go:noinline func div6_uint32(n uint32) bool { return n%6 == 0 } //go:noinline func div6_uint64(n uint64) bool { return n%6 == 0 } //go:noinline func div19_uint8(n uint8) bool { return n%19 == 0 } //go:noinline func div19_uint16(n uint16) bool { return n%19 == 0 } //go:noinline func div19_uint32(n uint32) bool { return n%19 == 0 } //go:noinline func div19_uint64(n uint64) bool { return n%19 == 0 } //go:noinline func div6_int8(n int8) bool { return n%6 == 0 } //go:noinline func div6_int16(n int16) bool { return n%6 == 0 } //go:noinline func div6_int32(n int32) bool { return n%6 == 0 } //go:noinline func div6_int64(n int64) bool { return n%6 == 0 } //go:noinline func div19_int8(n int8) bool { return n%19 == 0 } //go:noinline func div19_int16(n int16) bool { return n%19 == 0 } //go:noinline func div19_int32(n int32) bool { return n%19 == 0 } //go:noinline func div19_int64(n int64) bool { return n%19 == 0 } // testDivisibility confirms that rewrite rules x%c ==0 for c constant are correct. func testDivisibility(t *testing.T) { // unsigned tests // test an even and an odd divisor var sixU, nineteenU uint64 = 6, 19 // test all inputs for uint8, uint16 for i := uint64(0); i <= math.MaxUint16; i++ { if i <= math.MaxUint8 { if want, got := uint8(i)%uint8(sixU) == 0, div6_uint8(uint8(i)); got != want { t.Errorf("div6_uint8(%d) = %v want %v", i, got, want) } if want, got := uint8(i)%uint8(nineteenU) == 0, div19_uint8(uint8(i)); got != want { t.Errorf("div6_uint19(%d) = %v want %v", i, got, want) } } if want, got := uint16(i)%uint16(sixU) == 0, div6_uint16(uint16(i)); got != want { t.Errorf("div6_uint16(%d) = %v want %v", i, got, want) } if want, got := uint16(i)%uint16(nineteenU) == 0, div19_uint16(uint16(i)); got != want { t.Errorf("div19_uint16(%d) = %v want %v", i, got, want) } } var maxU32, maxU64 uint64 = math.MaxUint32, math.MaxUint64 // spot check inputs for uint32 and uint64 xu := []uint64{ 0, 1, 2, 3, 4, 5, sixU, 2 * sixU, 3 * sixU, 5 * sixU, 12345 * sixU, sixU + 1, 2*sixU - 5, 3*sixU + 3, 5*sixU + 4, 12345*sixU - 2, nineteenU, 2 * nineteenU, 3 * nineteenU, 5 * nineteenU, 12345 * nineteenU, nineteenU + 1, 2*nineteenU - 5, 3*nineteenU + 3, 5*nineteenU + 4, 12345*nineteenU - 2, maxU32, maxU32 - 1, maxU32 - 2, maxU32 - 3, maxU32 - 4, maxU32 - 5, maxU32 - 6, maxU32 - 7, maxU32 - 8, maxU32 - 9, maxU32 - 10, maxU32 - 11, maxU32 - 12, maxU32 - 13, maxU32 - 14, maxU32 - 15, maxU32 - 16, maxU32 - 17, maxU32 - 18, maxU32 - 19, maxU32 - 20, maxU64, maxU64 - 1, maxU64 - 2, maxU64 - 3, maxU64 - 4, maxU64 - 5, maxU64 - 6, maxU64 - 7, maxU64 - 8, maxU64 - 9, maxU64 - 10, maxU64 - 11, maxU64 - 12, maxU64 - 13, maxU64 - 14, maxU64 - 15, maxU64 - 16, maxU64 - 17, maxU64 - 18, maxU64 - 19, maxU64 - 20, } for _, x := range xu { if x <= maxU32 { if want, got := uint32(x)%uint32(sixU) == 0, div6_uint32(uint32(x)); got != want { t.Errorf("div6_uint32(%d) = %v want %v", x, got, want) } if want, got := uint32(x)%uint32(nineteenU) == 0, div19_uint32(uint32(x)); got != want { t.Errorf("div19_uint32(%d) = %v want %v", x, got, want) } } if want, got := x%sixU == 0, div6_uint64(x); got != want { t.Errorf("div6_uint64(%d) = %v want %v", x, got, want) } if want, got := x%nineteenU == 0, div19_uint64(x); got != want { t.Errorf("div19_uint64(%d) = %v want %v", x, got, want) } } // signed tests // test an even and an odd divisor var sixS, nineteenS int64 = 6, 19 // test all inputs for int8, int16 for i := int64(math.MinInt16); i <= math.MaxInt16; i++ { if math.MinInt8 <= i && i <= math.MaxInt8 { if want, got := int8(i)%int8(sixS) == 0, div6_int8(int8(i)); got != want { t.Errorf("div6_int8(%d) = %v want %v", i, got, want) } if want, got := int8(i)%int8(nineteenS) == 0, div19_int8(int8(i)); got != want { t.Errorf("div6_int19(%d) = %v want %v", i, got, want) } } if want, got := int16(i)%int16(sixS) == 0, div6_int16(int16(i)); got != want { t.Errorf("div6_int16(%d) = %v want %v", i, got, want) } if want, got := int16(i)%int16(nineteenS) == 0, div19_int16(int16(i)); got != want { t.Errorf("div19_int16(%d) = %v want %v", i, got, want) } } var minI32, maxI32, minI64, maxI64 int64 = math.MinInt32, math.MaxInt32, math.MinInt64, math.MaxInt64 // spot check inputs for int32 and int64 xs := []int64{ 0, 1, 2, 3, 4, 5, -1, -2, -3, -4, -5, sixS, 2 * sixS, 3 * sixS, 5 * sixS, 12345 * sixS, sixS + 1, 2*sixS - 5, 3*sixS + 3, 5*sixS + 4, 12345*sixS - 2, -sixS, -2 * sixS, -3 * sixS, -5 * sixS, -12345 * sixS, -sixS + 1, -2*sixS - 5, -3*sixS + 3, -5*sixS + 4, -12345*sixS - 2, nineteenS, 2 * nineteenS, 3 * nineteenS, 5 * nineteenS, 12345 * nineteenS, nineteenS + 1, 2*nineteenS - 5, 3*nineteenS + 3, 5*nineteenS + 4, 12345*nineteenS - 2, -nineteenS, -2 * nineteenS, -3 * nineteenS, -5 * nineteenS, -12345 * nineteenS, -nineteenS + 1, -2*nineteenS - 5, -3*nineteenS + 3, -5*nineteenS + 4, -12345*nineteenS - 2, minI32, minI32 + 1, minI32 + 2, minI32 + 3, minI32 + 4, minI32 + 5, minI32 + 6, minI32 + 7, minI32 + 8, minI32 + 9, minI32 + 10, minI32 + 11, minI32 + 12, minI32 + 13, minI32 + 14, minI32 + 15, minI32 + 16, minI32 + 17, minI32 + 18, minI32 + 19, minI32 + 20, maxI32, maxI32 - 1, maxI32 - 2, maxI32 - 3, maxI32 - 4, maxI32 - 5, maxI32 - 6, maxI32 - 7, maxI32 - 8, maxI32 - 9, maxI32 - 10, maxI32 - 11, maxI32 - 12, maxI32 - 13, maxI32 - 14, maxI32 - 15, maxI32 - 16, maxI32 - 17, maxI32 - 18, maxI32 - 19, maxI32 - 20, minI64, minI64 + 1, minI64 + 2, minI64 + 3, minI64 + 4, minI64 + 5, minI64 + 6, minI64 + 7, minI64 + 8, minI64 + 9, minI64 + 10, minI64 + 11, minI64 + 12, minI64 + 13, minI64 + 14, minI64 + 15, minI64 + 16, minI64 + 17, minI64 + 18, minI64 + 19, minI64 + 20, maxI64, maxI64 - 1, maxI64 - 2, maxI64 - 3, maxI64 - 4, maxI64 - 5, maxI64 - 6, maxI64 - 7, maxI64 - 8, maxI64 - 9, maxI64 - 10, maxI64 - 11, maxI64 - 12, maxI64 - 13, maxI64 - 14, maxI64 - 15, maxI64 - 16, maxI64 - 17, maxI64 - 18, maxI64 - 19, maxI64 - 20, } for _, x := range xs { if minI32 <= x && x <= maxI32 { if want, got := int32(x)%int32(sixS) == 0, div6_int32(int32(x)); got != want { t.Errorf("div6_int32(%d) = %v want %v", x, got, want) } if want, got := int32(x)%int32(nineteenS) == 0, div19_int32(int32(x)); got != want { t.Errorf("div19_int32(%d) = %v want %v", x, got, want) } } if want, got := x%sixS == 0, div6_int64(x); got != want { t.Errorf("div6_int64(%d) = %v want %v", x, got, want) } if want, got := x%nineteenS == 0, div19_int64(x); got != want { t.Errorf("div19_int64(%d) = %v want %v", x, got, want) } } } //go:noinline func genREV16_1(c uint64) uint64 { b := ((c & 0xff00ff00ff00ff00) >> 8) | ((c & 0x00ff00ff00ff00ff) << 8) return b } //go:noinline func genREV16_2(c uint64) uint64 { b := ((c & 0xff00ff00) >> 8) | ((c & 0x00ff00ff) << 8) return b } //go:noinline func genREV16W(c uint32) uint32 { b := ((c & 0xff00ff00) >> 8) | ((c & 0x00ff00ff) << 8) return b } func TestREV16(t *testing.T) { x := uint64(0x8f7f6f5f4f3f2f1f) want1 := uint64(0x7f8f5f6f3f4f1f2f) want2 := uint64(0x3f4f1f2f) got1 := genREV16_1(x) if got1 != want1 { t.Errorf("genREV16_1(%#x) = %#x want %#x", x, got1, want1) } got2 := genREV16_2(x) if got2 != want2 { t.Errorf("genREV16_2(%#x) = %#x want %#x", x, got2, want2) } } func TestREV16W(t *testing.T) { x := uint32(0x4f3f2f1f) want := uint32(0x3f4f1f2f) got := genREV16W(x) if got != want { t.Errorf("genREV16W(%#x) = %#x want %#x", x, got, want) } } PK ! ](�� � testdata/addressed_test.gonu �[��� // Copyright 2015 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 main import ( "fmt" "testing" ) var output string func mypanic(t *testing.T, s string) { t.Fatalf(s + "\n" + output) } func assertEqual(t *testing.T, x, y int) { if x != y { mypanic(t, fmt.Sprintf("assertEqual failed got %d, want %d", x, y)) } } func TestAddressed(t *testing.T) { x := f1_ssa(2, 3) output += fmt.Sprintln("*x is", *x) output += fmt.Sprintln("Gratuitously use some stack") output += fmt.Sprintln("*x is", *x) assertEqual(t, *x, 9) w := f3a_ssa(6) output += fmt.Sprintln("*w is", *w) output += fmt.Sprintln("Gratuitously use some stack") output += fmt.Sprintln("*w is", *w) assertEqual(t, *w, 6) y := f3b_ssa(12) output += fmt.Sprintln("*y.(*int) is", *y.(*int)) output += fmt.Sprintln("Gratuitously use some stack") output += fmt.Sprintln("*y.(*int) is", *y.(*int)) assertEqual(t, *y.(*int), 12) z := f3c_ssa(8) output += fmt.Sprintln("*z.(*int) is", *z.(*int)) output += fmt.Sprintln("Gratuitously use some stack") output += fmt.Sprintln("*z.(*int) is", *z.(*int)) assertEqual(t, *z.(*int), 8) args(t) test_autos(t) } //go:noinline func f1_ssa(x, y int) *int { x = x*y + y return &x } //go:noinline func f3a_ssa(x int) *int { return &x } //go:noinline func f3b_ssa(x int) interface{} { // ./foo.go:15: internal error: f3b_ssa ~r1 (type interface {}) recorded as live on entry return &x } //go:noinline func f3c_ssa(y int) interface{} { x := y return &x } type V struct { p *V w, x int64 } func args(t *testing.T) { v := V{p: nil, w: 1, x: 1} a := V{p: &v, w: 2, x: 2} b := V{p: &v, w: 0, x: 0} i := v.args_ssa(a, b) output += fmt.Sprintln("i=", i) assertEqual(t, int(i), 2) } //go:noinline func (v V) args_ssa(a, b V) int64 { if v.w == 0 { return v.x } if v.w == 1 { return a.x } if v.w == 2 { return b.x } b.p.p = &a // v.p in caller = &a return -1 } func test_autos(t *testing.T) { test(t, 11) test(t, 12) test(t, 13) test(t, 21) test(t, 22) test(t, 23) test(t, 31) test(t, 32) } func test(t *testing.T, which int64) { output += fmt.Sprintln("test", which) v1 := V{w: 30, x: 3, p: nil} v2, v3 := v1.autos_ssa(which, 10, 1, 20, 2) if which != v2.val() { output += fmt.Sprintln("Expected which=", which, "got v2.val()=", v2.val()) mypanic(t, "Failure of expected V value") } if v2.p.val() != v3.val() { output += fmt.Sprintln("Expected v2.p.val()=", v2.p.val(), "got v3.val()=", v3.val()) mypanic(t, "Failure of expected V.p value") } if which != v3.p.p.p.p.p.p.p.val() { output += fmt.Sprintln("Expected which=", which, "got v3.p.p.p.p.p.p.p.val()=", v3.p.p.p.p.p.p.p.val()) mypanic(t, "Failure of expected V.p value") } } func (v V) val() int64 { return v.w + v.x } // autos_ssa uses contents of v and parameters w1, w2, x1, x2 // to initialize a bunch of locals, all of which have their // address taken to force heap allocation, and then based on // the value of which a pair of those locals are copied in // various ways to the two results y, and z, which are also // addressed. Which is expected to be one of 11-13, 21-23, 31, 32, // and y.val() should be equal to which and y.p.val() should // be equal to z.val(). Also, x(.p)**8 == x; that is, the // autos are all linked into a ring. // //go:noinline func (v V) autos_ssa(which, w1, x1, w2, x2 int64) (y, z V) { fill_ssa(v.w, v.x, &v, v.p) // gratuitous no-op to force addressing var a, b, c, d, e, f, g, h V fill_ssa(w1, x1, &a, &b) fill_ssa(w1, x2, &b, &c) fill_ssa(w1, v.x, &c, &d) fill_ssa(w2, x1, &d, &e) fill_ssa(w2, x2, &e, &f) fill_ssa(w2, v.x, &f, &g) fill_ssa(v.w, x1, &g, &h) fill_ssa(v.w, x2, &h, &a) switch which { case 11: y = a z.getsI(&b) case 12: y.gets(&b) z = c case 13: y.gets(&c) z = d case 21: y.getsI(&d) z.gets(&e) case 22: y = e z = f case 23: y.gets(&f) z.getsI(&g) case 31: y = g z.gets(&h) case 32: y.getsI(&h) z = a default: panic("") } return } // gets is an address-mentioning way of implementing // structure assignment. // //go:noinline func (to *V) gets(from *V) { *to = *from } // gets is an address-and-interface-mentioning way of // implementing structure assignment. // //go:noinline func (to *V) getsI(from interface{}) { *to = *from.(*V) } // fill_ssa initializes r with V{w:w, x:x, p:p} // //go:noinline func fill_ssa(w, x int64, r, p *V) { *r = V{w: w, x: x, p: p} } PK ! ��� � testdata/flowgraph_generator1.gonu �[��� // 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. package main import ( "fmt" "strings" ) // make fake flow graph. // The blocks of the flow graph are designated with letters A // through Z, always including A (start block) and Z (exit // block) The specification of a flow graph is a comma- // separated list of block successor words, for blocks ordered // A, B, C etc, where each block except Z has one or two // successors, and any block except A can be a target. Within // the generated code, each block with two successors includes // a conditional testing x & 1 != 0 (x is the input parameter // to the generated function) and also unconditionally shifts x // right by one, so that different inputs generate different // execution paths, including loops. Every block inverts a // global binary to ensure it is not empty. For a flow graph // with J words (J+1 blocks), a J-1 bit serial number specifies // which blocks (not including A and Z) include an increment of // the return variable y by increasing powers of 10, and a // different version of the test function is created for each // of the 2-to-the-(J-1) serial numbers. // For each generated function a compact summary is also // created so that the generated function can be simulated // with a simple interpreter to sanity check the behavior of // the compiled code. // For example: // func BC_CD_BE_BZ_CZ101(x int64) int64 { // y := int64(0) // var b int64 // _ = b // b = x & 1 // x = x >> 1 // if b != 0 { // goto C // } // goto B // B: // glob_ = !glob_ // y += 1 // b = x & 1 // x = x >> 1 // if b != 0 { // goto D // } // goto C // C: // glob_ = !glob_ // // no y increment // b = x & 1 // x = x >> 1 // if b != 0 { // goto E // } // goto B // D: // glob_ = !glob_ // y += 10 // b = x & 1 // x = x >> 1 // if b != 0 { // goto Z // } // goto B // E: // glob_ = !glob_ // // no y increment // b = x & 1 // x = x >> 1 // if b != 0 { // goto Z // } // goto C // Z: // return y // } // {f:BC_CD_BE_BZ_CZ101, // maxin:32, blocks:[]blo{ // blo{inc:0, cond:true, succs:[2]int64{1, 2}}, // blo{inc:1, cond:true, succs:[2]int64{2, 3}}, // blo{inc:0, cond:true, succs:[2]int64{1, 4}}, // blo{inc:10, cond:true, succs:[2]int64{1, 25}}, // blo{inc:0, cond:true, succs:[2]int64{2, 25}},}}, var labels string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" func blocks(spec string) (blocks []string, fnameBase string) { spec = strings.ToUpper(spec) blocks = strings.Split(spec, ",") fnameBase = strings.Replace(spec, ",", "_", -1) return } func makeFunctionFromFlowGraph(blocks []blo, fname string) string { s := "" for j := range blocks { // begin block if j == 0 { // block A, implicit label s += ` func ` + fname + `(x int64) int64 { y := int64(0) var b int64 _ = b` } else { // block B,C, etc, explicit label w/ conditional increment l := labels[j : j+1] yeq := ` // no y increment` if blocks[j].inc != 0 { yeq = ` y += ` + fmt.Sprintf("%d", blocks[j].inc) } s += ` ` + l + `: glob = !glob` + yeq } // edges to successors if blocks[j].cond { // conditionally branch to second successor s += ` b = x & 1 x = x >> 1 if b != 0 {` + ` goto ` + string(labels[blocks[j].succs[1]]) + ` }` } // branch to first successor s += ` goto ` + string(labels[blocks[j].succs[0]]) } // end block (Z) s += ` Z: return y } ` return s } var graphs []string = []string{ "Z", "BZ,Z", "B,BZ", "BZ,BZ", "ZB,Z", "B,ZB", "ZB,BZ", "ZB,ZB", "BC,C,Z", "BC,BC,Z", "BC,BC,BZ", "BC,Z,Z", "BC,ZC,Z", "BC,ZC,BZ", "BZ,C,Z", "BZ,BC,Z", "BZ,CZ,Z", "BZ,C,BZ", "BZ,BC,BZ", "BZ,CZ,BZ", "BZ,C,CZ", "BZ,BC,CZ", "BZ,CZ,CZ", "BC,CD,BE,BZ,CZ", "BC,BD,CE,CZ,BZ", "BC,BD,CE,FZ,GZ,F,G", "BC,BD,CE,FZ,GZ,G,F", "BC,DE,BE,FZ,FZ,Z", "BC,DE,BE,FZ,ZF,Z", "BC,DE,BE,ZF,FZ,Z", "BC,DE,EB,FZ,FZ,Z", "BC,ED,BE,FZ,FZ,Z", "CB,DE,BE,FZ,FZ,Z", "CB,ED,BE,FZ,FZ,Z", "BC,ED,EB,FZ,ZF,Z", "CB,DE,EB,ZF,FZ,Z", "CB,ED,EB,FZ,FZ,Z", "BZ,CD,CD,CE,BZ", "EC,DF,FG,ZC,GB,BE,FD", "BH,CF,DG,HE,BF,CG,DH,BZ", } // blo describes a block in the generated/interpreted code type blo struct { inc int64 // increment amount cond bool // block ends in conditional succs [2]int64 } // strings2blocks converts a slice of strings specifying // successors into a slice of blo encoding the blocks in a // common form easy to execute or interpret. func strings2blocks(blocks []string, fname string, i int) (bs []blo, cond uint) { bs = make([]blo, len(blocks)) edge := int64(1) cond = 0 k := uint(0) for j, s := range blocks { if j == 0 { } else { if (i>>k)&1 != 0 { bs[j].inc = edge edge *= 10 } k++ } if len(s) > 1 { bs[j].succs[1] = int64(blocks[j][1] - 'A') bs[j].cond = true cond++ } bs[j].succs[0] = int64(blocks[j][0] - 'A') } return bs, cond } // fmtBlocks writes out the blocks for consumption in the generated test func fmtBlocks(bs []blo) string { s := "[]blo{" for _, b := range bs { s += fmt.Sprintf("blo{inc:%d, cond:%v, succs:[2]int64{%d, %d}},", b.inc, b.cond, b.succs[0], b.succs[1]) } s += "}" return s } func main() { fmt.Printf(`// This is a machine-generated test file from flowgraph_generator1.go. package main import "fmt" var glob bool `) s := "var funs []fun = []fun{" for _, g := range graphs { split, fnameBase := blocks(g) nconfigs := 1 << uint(len(split)-1) for i := 0; i < nconfigs; i++ { fname := fnameBase + fmt.Sprintf("%b", i) bs, k := strings2blocks(split, fname, i) fmt.Printf("%s", makeFunctionFromFlowGraph(bs, fname)) s += ` {f:` + fname + `, maxin:` + fmt.Sprintf("%d", 1<<k) + `, blocks:` + fmtBlocks(bs) + `},` } } s += `} ` // write types for name+array tables. fmt.Printf("%s", ` type blo struct { inc int64 cond bool succs [2]int64 } type fun struct { f func(int64) int64 maxin int64 blocks []blo } `) // write table of function names and blo arrays. fmt.Printf("%s", s) // write interpreter and main/test fmt.Printf("%s", ` func interpret(blocks []blo, x int64) (int64, bool) { y := int64(0) last := int64(25) // 'Z'-'A' j := int64(0) for i := 0; i < 4*len(blocks); i++ { b := blocks[j] y += b.inc next := b.succs[0] if b.cond { c := x&1 != 0 x = x>>1 if c { next = b.succs[1] } } if next == last { return y, true } j = next } return -1, false } func main() { sum := int64(0) for i, f := range funs { for x := int64(0); x < 16*f.maxin; x++ { y, ok := interpret(f.blocks, x) if ok { yy := f.f(x) if y != yy { fmt.Printf("y(%d) != yy(%d), x=%b, i=%d, blocks=%v\n", y, yy, x, i, f.blocks) return } sum += y } } } // fmt.Printf("Sum of all returns over all terminating inputs is %d\n", sum) } `) } PK ! ���,� � testdata/unsafe_test.gonu �[��� // Copyright 2015 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 main import ( "runtime" "testing" "unsafe" ) // global pointer slot var a *[8]uint // unfoldable true var always = true // Test to make sure that a pointer value which is alive // across a call is retained, even when there are matching // conversions to/from uintptr around the call. // We arrange things very carefully to have to/from // conversions on either side of the call which cannot be // combined with any other conversions. func f_ssa() *[8]uint { // Make x a uintptr pointing to where a points. var x uintptr if always { x = uintptr(unsafe.Pointer(a)) } else { x = 0 } // Clobber the global pointer. The only live ref // to the allocated object is now x. a = nil // Convert to pointer so it should hold // the object live across GC call. p := unsafe.Pointer(x) // Call gc. runtime.GC() // Convert back to uintptr. y := uintptr(p) // Mess with y so that the subsequent cast // to unsafe.Pointer can't be combined with the // uintptr cast above. var z uintptr if always { z = y } else { z = 0 } return (*[8]uint)(unsafe.Pointer(z)) } // g_ssa is the same as f_ssa, but with a bit of pointer // arithmetic for added insanity. func g_ssa() *[7]uint { // Make x a uintptr pointing to where a points. var x uintptr if always { x = uintptr(unsafe.Pointer(a)) } else { x = 0 } // Clobber the global pointer. The only live ref // to the allocated object is now x. a = nil // Offset x by one int. x += unsafe.Sizeof(int(0)) // Convert to pointer so it should hold // the object live across GC call. p := unsafe.Pointer(x) // Call gc. runtime.GC() // Convert back to uintptr. y := uintptr(p) // Mess with y so that the subsequent cast // to unsafe.Pointer can't be combined with the // uintptr cast above. var z uintptr if always { z = y } else { z = 0 } return (*[7]uint)(unsafe.Pointer(z)) } func testf(t *testing.T) { a = new([8]uint) for i := 0; i < 8; i++ { a[i] = 0xabcd } c := f_ssa() for i := 0; i < 8; i++ { if c[i] != 0xabcd { t.Fatalf("%d:%x\n", i, c[i]) } } } func testg(t *testing.T) { a = new([8]uint) for i := 0; i < 8; i++ { a[i] = 0xabcd } c := g_ssa() for i := 0; i < 7; i++ { if c[i] != 0xabcd { t.Fatalf("%d:%x\n", i, c[i]) } } } func alias_ssa(ui64 *uint64, ui32 *uint32) uint32 { *ui32 = 0xffffffff *ui64 = 0 // store ret := *ui32 // load from same address, should be zero *ui64 = 0xffffffffffffffff // store return ret } func testdse(t *testing.T) { x := int64(-1) // construct two pointers that alias one another ui64 := (*uint64)(unsafe.Pointer(&x)) ui32 := (*uint32)(unsafe.Pointer(&x)) if want, got := uint32(0), alias_ssa(ui64, ui32); got != want { t.Fatalf("alias_ssa: wanted %d, got %d\n", want, got) } } func TestUnsafe(t *testing.T) { testf(t) testg(t) testdse(t) } PK ! H( �� � testdata/string_test.gonu �[��� // Copyright 2015 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. // string_ssa.go tests string operations. package main import "testing" //go:noinline func testStringSlice1_ssa(a string, i, j int) string { return a[i:] } //go:noinline func testStringSlice2_ssa(a string, i, j int) string { return a[:j] } //go:noinline func testStringSlice12_ssa(a string, i, j int) string { return a[i:j] } func testStringSlice(t *testing.T) { tests := [...]struct { fn func(string, int, int) string s string low, high int want string }{ // -1 means the value is not used. {testStringSlice1_ssa, "foobar", 0, -1, "foobar"}, {testStringSlice1_ssa, "foobar", 3, -1, "bar"}, {testStringSlice1_ssa, "foobar", 6, -1, ""}, {testStringSlice2_ssa, "foobar", -1, 0, ""}, {testStringSlice2_ssa, "foobar", -1, 3, "foo"}, {testStringSlice2_ssa, "foobar", -1, 6, "foobar"}, {testStringSlice12_ssa, "foobar", 0, 6, "foobar"}, {testStringSlice12_ssa, "foobar", 0, 0, ""}, {testStringSlice12_ssa, "foobar", 6, 6, ""}, {testStringSlice12_ssa, "foobar", 1, 5, "ooba"}, {testStringSlice12_ssa, "foobar", 3, 3, ""}, {testStringSlice12_ssa, "", 0, 0, ""}, } for i, test := range tests { if got := test.fn(test.s, test.low, test.high); test.want != got { t.Errorf("#%d %s[%d,%d] = %s, want %s", i, test.s, test.low, test.high, got, test.want) } } } type prefix struct { prefix string } func (p *prefix) slice_ssa() { p.prefix = p.prefix[:3] } //go:noinline func testStructSlice(t *testing.T) { p := &prefix{"prefix"} p.slice_ssa() if "pre" != p.prefix { t.Errorf("wrong field slice: wanted %s got %s", "pre", p.prefix) } } func testStringSlicePanic(t *testing.T) { defer func() { if r := recover(); r != nil { //println("panicked as expected") } }() str := "foobar" t.Errorf("got %s and expected to panic, but didn't", testStringSlice12_ssa(str, 3, 9)) } const _Accuracy_name = "BelowExactAbove" var _Accuracy_index = [...]uint8{0, 5, 10, 15} //go:noinline func testSmallIndexType_ssa(i int) string { return _Accuracy_name[_Accuracy_index[i]:_Accuracy_index[i+1]] } func testSmallIndexType(t *testing.T) { tests := []struct { i int want string }{ {0, "Below"}, {1, "Exact"}, {2, "Above"}, } for i, test := range tests { if got := testSmallIndexType_ssa(test.i); got != test.want { t.Errorf("#%d got %s wanted %s", i, got, test.want) } } } //go:noinline func testInt64Index_ssa(s string, i int64) byte { return s[i] } //go:noinline func testInt64Slice_ssa(s string, i, j int64) string { return s[i:j] } func testInt64Index(t *testing.T) { tests := []struct { i int64 j int64 b byte s string }{ {0, 5, 'B', "Below"}, {5, 10, 'E', "Exact"}, {10, 15, 'A', "Above"}, } str := "BelowExactAbove" for i, test := range tests { if got := testInt64Index_ssa(str, test.i); got != test.b { t.Errorf("#%d got %d wanted %d", i, got, test.b) } if got := testInt64Slice_ssa(str, test.i, test.j); got != test.s { t.Errorf("#%d got %s wanted %s", i, got, test.s) } } } func testInt64IndexPanic(t *testing.T) { defer func() { if r := recover(); r != nil { //println("panicked as expected") } }() str := "foobar" t.Errorf("got %d and expected to panic, but didn't", testInt64Index_ssa(str, 1<<32+1)) } func testInt64SlicePanic(t *testing.T) { defer func() { if r := recover(); r != nil { //println("panicked as expected") } }() str := "foobar" t.Errorf("got %s and expected to panic, but didn't", testInt64Slice_ssa(str, 1<<32, 1<<32+1)) } //go:noinline func testStringElem_ssa(s string, i int) byte { return s[i] } func testStringElem(t *testing.T) { tests := []struct { s string i int n byte }{ {"foobar", 3, 98}, {"foobar", 0, 102}, {"foobar", 5, 114}, } for _, test := range tests { if got := testStringElem_ssa(test.s, test.i); got != test.n { t.Errorf("testStringElem \"%s\"[%d] = %d, wanted %d", test.s, test.i, got, test.n) } } } //go:noinline func testStringElemConst_ssa(i int) byte { s := "foobar" return s[i] } func testStringElemConst(t *testing.T) { if got := testStringElemConst_ssa(3); got != 98 { t.Errorf("testStringElemConst= %d, wanted 98", got) } } func TestString(t *testing.T) { testStringSlice(t) testStringSlicePanic(t) testStructSlice(t) testSmallIndexType(t) testStringElem(t) testStringElemConst(t) testInt64Index(t) testInt64IndexPanic(t) testInt64SlicePanic(t) } PK ! �m�� � testdata/deferNoReturn_test.gonu �[��� // Copyright 2015 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. // Test that a defer in a function with no return // statement will compile correctly. package main import "testing" func deferNoReturn_ssa() { defer func() { println("returned") }() for { println("loop") } } func TestDeferNoReturn(t *testing.T) { // This is a compile-time test, no runtime testing required. } PK ! �ޱ�� � testdata/compound_test.gonu �[��� // Copyright 2015 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. // Test compound objects package main import ( "testing" ) func string_ssa(a, b string, x bool) string { s := "" if x { s = a } else { s = b } return s } func testString(t *testing.T) { a := "foo" b := "barz" if want, got := a, string_ssa(a, b, true); got != want { t.Errorf("string_ssa(%v, %v, true) = %v, want %v\n", a, b, got, want) } if want, got := b, string_ssa(a, b, false); got != want { t.Errorf("string_ssa(%v, %v, false) = %v, want %v\n", a, b, got, want) } } //go:noinline func complex64_ssa(a, b complex64, x bool) complex64 { var c complex64 if x { c = a } else { c = b } return c } //go:noinline func complex128_ssa(a, b complex128, x bool) complex128 { var c complex128 if x { c = a } else { c = b } return c } func testComplex64(t *testing.T) { var a complex64 = 1 + 2i var b complex64 = 3 + 4i if want, got := a, complex64_ssa(a, b, true); got != want { t.Errorf("complex64_ssa(%v, %v, true) = %v, want %v\n", a, b, got, want) } if want, got := b, complex64_ssa(a, b, false); got != want { t.Errorf("complex64_ssa(%v, %v, true) = %v, want %v\n", a, b, got, want) } } func testComplex128(t *testing.T) { var a complex128 = 1 + 2i var b complex128 = 3 + 4i if want, got := a, complex128_ssa(a, b, true); got != want { t.Errorf("complex128_ssa(%v, %v, true) = %v, want %v\n", a, b, got, want) } if want, got := b, complex128_ssa(a, b, false); got != want { t.Errorf("complex128_ssa(%v, %v, true) = %v, want %v\n", a, b, got, want) } } func slice_ssa(a, b []byte, x bool) []byte { var s []byte if x { s = a } else { s = b } return s } func testSlice(t *testing.T) { a := []byte{3, 4, 5} b := []byte{7, 8, 9} if want, got := byte(3), slice_ssa(a, b, true)[0]; got != want { t.Errorf("slice_ssa(%v, %v, true) = %v, want %v\n", a, b, got, want) } if want, got := byte(7), slice_ssa(a, b, false)[0]; got != want { t.Errorf("slice_ssa(%v, %v, false) = %v, want %v\n", a, b, got, want) } } func interface_ssa(a, b interface{}, x bool) interface{} { var s interface{} if x { s = a } else { s = b } return s } func testInterface(t *testing.T) { a := interface{}(3) b := interface{}(4) if want, got := 3, interface_ssa(a, b, true).(int); got != want { t.Errorf("interface_ssa(%v, %v, true) = %v, want %v\n", a, b, got, want) } if want, got := 4, interface_ssa(a, b, false).(int); got != want { t.Errorf("interface_ssa(%v, %v, false) = %v, want %v\n", a, b, got, want) } } func TestCompound(t *testing.T) { testString(t) testSlice(t) testInterface(t) testComplex64(t) testComplex128(t) } PK ! !p��g g # testdata/reproducible/issue38068.gonu �[��� // Copyright 2020 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 issue38068 // A type with a couple of inlinable, non-pointer-receiver methods // that have params and local variables. type A struct { s string next *A prev *A } // Inlinable, value-received method with locals and parms. func (a A) double(x string, y int) string { if y == 191 { a.s = "" } q := a.s + "a" r := a.s + "b" return q + r } // Inlinable, value-received method with locals and parms. func (a A) triple(x string, y int) string { q := a.s if y == 998877 { a.s = x } r := a.s + a.s return q + r } type methods struct { m1 func(a *A, x string, y int) string m2 func(a *A, x string, y int) string } // Now a function that makes references to the methods via pointers, // which should trigger the wrapper generation. func P(a *A, ms *methods) { if a != nil { defer func() { println("done") }() } println(ms.m1(a, "a", 2)) println(ms.m2(a, "b", 3)) } func G(x *A, n int) { if n <= 0 { println(n) return } // Address-taken local of type A, which will insure that the // compiler's writeType() routine will create a method wrapper. var a, b A a.next = x a.prev = &b x = &a G(x, n-2) } var M methods func F() { M.m1 = (*A).double M.m2 = (*A).triple G(nil, 100) } PK ! ��� # testdata/reproducible/issue30202.gonu �[��� // Copyright 2019 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 p func A(x interface { X() int }) int { return x.X() } func B(x interface { X() int }) int { return x.X() } PK ! �c� � # testdata/reproducible/issue27013.gonu �[��� // Copyright 2018 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 p func A(arg interface{}) { _ = arg.(interface{ Func() int32 }) _ = arg.(interface{ Func() int32 }) _ = arg.(interface{ Func() int32 }) _ = arg.(interface{ Func() int32 }) _ = arg.(interface{ Func() int32 }) _ = arg.(interface{ Func() int32 }) _ = arg.(interface{ Func() int32 }) } PK ! cp7� � # testdata/reproducible/issue20272.gonu �[��� // Copyright 2017 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 p var ( i0 uint8 b0 byte i1 *uint8 b1 *byte i2 **uint8 b2 **byte i3 ***uint8 b3 ***byte i4 ****uint8 b4 ****byte i5 *****uint8 b5 *****byte i6 ******uint8 b6 ******byte i7 *******uint8 b7 *******byte i8 ********uint8 b8 ********byte ) PK ! 0���R R testdata/slice_test.gonu �[��� // Copyright 2018 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. // This test makes sure that t.s = t.s[0:x] doesn't write // either the slice pointer or the capacity. // See issue #14855. package main import "testing" const N = 1000000 type X struct { s []int } func TestSlice(t *testing.T) { done := make(chan struct{}) a := make([]int, N+10) x := &X{a} go func() { for i := 0; i < N; i++ { x.s = x.s[1:9] } done <- struct{}{} }() go func() { for i := 0; i < N; i++ { x.s = x.s[0:8] // should only write len } done <- struct{}{} }() <-done <-done if cap(x.s) != cap(a)-N { t.Errorf("wanted cap=%d, got %d\n", cap(a)-N, cap(x.s)) } if &x.s[0] != &a[N] { t.Errorf("wanted ptr=%p, got %p\n", &a[N], &x.s[0]) } } PK ! �\ft� � testdata/fp_test.gonu �[��� // Copyright 2015 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. // Tests floating point arithmetic expressions package main import ( "fmt" "testing" ) // manysub_ssa is designed to tickle bugs that depend on register // pressure or unfriendly operand ordering in registers (and at // least once it succeeded in this). // //go:noinline func manysub_ssa(a, b, c, d float64) (aa, ab, ac, ad, ba, bb, bc, bd, ca, cb, cc, cd, da, db, dc, dd float64) { aa = a + 11.0 - a ab = a - b ac = a - c ad = a - d ba = b - a bb = b + 22.0 - b bc = b - c bd = b - d ca = c - a cb = c - b cc = c + 33.0 - c cd = c - d da = d - a db = d - b dc = d - c dd = d + 44.0 - d return } // fpspill_ssa attempts to trigger a bug where phis with floating point values // were stored in non-fp registers causing an error in doasm. // //go:noinline func fpspill_ssa(a int) float64 { ret := -1.0 switch a { case 0: ret = 1.0 case 1: ret = 1.1 case 2: ret = 1.2 case 3: ret = 1.3 case 4: ret = 1.4 case 5: ret = 1.5 case 6: ret = 1.6 case 7: ret = 1.7 case 8: ret = 1.8 case 9: ret = 1.9 case 10: ret = 1.10 case 11: ret = 1.11 case 12: ret = 1.12 case 13: ret = 1.13 case 14: ret = 1.14 case 15: ret = 1.15 case 16: ret = 1.16 } return ret } //go:noinline func add64_ssa(a, b float64) float64 { return a + b } //go:noinline func mul64_ssa(a, b float64) float64 { return a * b } //go:noinline func sub64_ssa(a, b float64) float64 { return a - b } //go:noinline func div64_ssa(a, b float64) float64 { return a / b } //go:noinline func neg64_ssa(a, b float64) float64 { return -a + -1*b } //go:noinline func add32_ssa(a, b float32) float32 { return a + b } //go:noinline func mul32_ssa(a, b float32) float32 { return a * b } //go:noinline func sub32_ssa(a, b float32) float32 { return a - b } //go:noinline func div32_ssa(a, b float32) float32 { return a / b } //go:noinline func neg32_ssa(a, b float32) float32 { return -a + -1*b } //go:noinline func conv2Float64_ssa(a int8, b uint8, c int16, d uint16, e int32, f uint32, g int64, h uint64, i float32) (aa, bb, cc, dd, ee, ff, gg, hh, ii float64) { aa = float64(a) bb = float64(b) cc = float64(c) hh = float64(h) dd = float64(d) ee = float64(e) ff = float64(f) gg = float64(g) ii = float64(i) return } //go:noinline func conv2Float32_ssa(a int8, b uint8, c int16, d uint16, e int32, f uint32, g int64, h uint64, i float64) (aa, bb, cc, dd, ee, ff, gg, hh, ii float32) { aa = float32(a) bb = float32(b) cc = float32(c) dd = float32(d) ee = float32(e) ff = float32(f) gg = float32(g) hh = float32(h) ii = float32(i) return } func integer2floatConversions(t *testing.T) { { a, b, c, d, e, f, g, h, i := conv2Float64_ssa(0, 0, 0, 0, 0, 0, 0, 0, 0) expectAll64(t, "zero64", 0, a, b, c, d, e, f, g, h, i) } { a, b, c, d, e, f, g, h, i := conv2Float64_ssa(1, 1, 1, 1, 1, 1, 1, 1, 1) expectAll64(t, "one64", 1, a, b, c, d, e, f, g, h, i) } { a, b, c, d, e, f, g, h, i := conv2Float32_ssa(0, 0, 0, 0, 0, 0, 0, 0, 0) expectAll32(t, "zero32", 0, a, b, c, d, e, f, g, h, i) } { a, b, c, d, e, f, g, h, i := conv2Float32_ssa(1, 1, 1, 1, 1, 1, 1, 1, 1) expectAll32(t, "one32", 1, a, b, c, d, e, f, g, h, i) } { // Check maximum values a, b, c, d, e, f, g, h, i := conv2Float64_ssa(127, 255, 32767, 65535, 0x7fffffff, 0xffffffff, 0x7fffFFFFffffFFFF, 0xffffFFFFffffFFFF, 3.402823e38) expect64(t, "a", a, 127) expect64(t, "b", b, 255) expect64(t, "c", c, 32767) expect64(t, "d", d, 65535) expect64(t, "e", e, float64(int32(0x7fffffff))) expect64(t, "f", f, float64(uint32(0xffffffff))) expect64(t, "g", g, float64(int64(0x7fffffffffffffff))) expect64(t, "h", h, float64(uint64(0xffffffffffffffff))) expect64(t, "i", i, float64(float32(3.402823e38))) } { // Check minimum values (and tweaks for unsigned) a, b, c, d, e, f, g, h, i := conv2Float64_ssa(-128, 254, -32768, 65534, ^0x7fffffff, 0xfffffffe, ^0x7fffFFFFffffFFFF, 0xffffFFFFffffF401, 1.5e-45) expect64(t, "a", a, -128) expect64(t, "b", b, 254) expect64(t, "c", c, -32768) expect64(t, "d", d, 65534) expect64(t, "e", e, float64(^int32(0x7fffffff))) expect64(t, "f", f, float64(uint32(0xfffffffe))) expect64(t, "g", g, float64(^int64(0x7fffffffffffffff))) expect64(t, "h", h, float64(uint64(0xfffffffffffff401))) expect64(t, "i", i, float64(float32(1.5e-45))) } { // Check maximum values a, b, c, d, e, f, g, h, i := conv2Float32_ssa(127, 255, 32767, 65535, 0x7fffffff, 0xffffffff, 0x7fffFFFFffffFFFF, 0xffffFFFFffffFFFF, 3.402823e38) expect32(t, "a", a, 127) expect32(t, "b", b, 255) expect32(t, "c", c, 32767) expect32(t, "d", d, 65535) expect32(t, "e", e, float32(int32(0x7fffffff))) expect32(t, "f", f, float32(uint32(0xffffffff))) expect32(t, "g", g, float32(int64(0x7fffffffffffffff))) expect32(t, "h", h, float32(uint64(0xffffffffffffffff))) expect32(t, "i", i, float32(float64(3.402823e38))) } { // Check minimum values (and tweaks for unsigned) a, b, c, d, e, f, g, h, i := conv2Float32_ssa(-128, 254, -32768, 65534, ^0x7fffffff, 0xfffffffe, ^0x7fffFFFFffffFFFF, 0xffffFFFFffffF401, 1.5e-45) expect32(t, "a", a, -128) expect32(t, "b", b, 254) expect32(t, "c", c, -32768) expect32(t, "d", d, 65534) expect32(t, "e", e, float32(^int32(0x7fffffff))) expect32(t, "f", f, float32(uint32(0xfffffffe))) expect32(t, "g", g, float32(^int64(0x7fffffffffffffff))) expect32(t, "h", h, float32(uint64(0xfffffffffffff401))) expect32(t, "i", i, float32(float64(1.5e-45))) } } func multiplyAdd(t *testing.T) { { // Test that a multiply-accumulate operation with intermediate // rounding forced by a float32() cast produces the expected // result. // Test cases generated experimentally on a system (s390x) that // supports fused multiply-add instructions. var tests = [...]struct{ x, y, z, res float32 }{ {0.6046603, 0.9405091, 0.6645601, 1.2332485}, // fused multiply-add result: 1.2332486 {0.67908466, 0.21855305, 0.20318687, 0.3516029}, // fused multiply-add result: 0.35160288 {0.29311424, 0.29708257, 0.752573, 0.8396522}, // fused multiply-add result: 0.8396521 {0.5305857, 0.2535405, 0.282081, 0.41660595}, // fused multiply-add result: 0.41660598 {0.29711226, 0.89436173, 0.097454615, 0.36318043}, // fused multiply-add result: 0.36318046 {0.6810783, 0.24151509, 0.31152245, 0.47601312}, // fused multiply-add result: 0.47601315 {0.73023146, 0.18292491, 0.4283571, 0.5619346}, // fused multiply-add result: 0.56193465 {0.89634174, 0.32208398, 0.7211478, 1.009845}, // fused multiply-add result: 1.0098451 {0.6280982, 0.12675293, 0.2813303, 0.36094356}, // fused multiply-add result: 0.3609436 {0.29400632, 0.75316125, 0.15096405, 0.3723982}, // fused multiply-add result: 0.37239823 } check := func(s string, got, expected float32) { if got != expected { fmt.Printf("multiplyAdd: %s, expected %g, got %g\n", s, expected, got) } } for _, t := range tests { check( fmt.Sprintf("float32(%v * %v) + %v", t.x, t.y, t.z), func(x, y, z float32) float32 { return float32(x*y) + z }(t.x, t.y, t.z), t.res) check( fmt.Sprintf("%v += float32(%v * %v)", t.z, t.x, t.y), func(x, y, z float32) float32 { z += float32(x * y) return z }(t.x, t.y, t.z), t.res) } } { // Test that a multiply-accumulate operation with intermediate // rounding forced by a float64() cast produces the expected // result. // Test cases generated experimentally on a system (s390x) that // supports fused multiply-add instructions. var tests = [...]struct{ x, y, z, res float64 }{ {0.4688898449024232, 0.28303415118044517, 0.29310185733681576, 0.42581369658590373}, // fused multiply-add result: 0.4258136965859037 {0.7886049150193449, 0.3618054804803169, 0.8805431227416171, 1.1658647029293308}, // fused multiply-add result: 1.1658647029293305 {0.7302314772948083, 0.18292491645390843, 0.4283570818068078, 0.5619346137829748}, // fused multiply-add result: 0.5619346137829747 {0.6908388315056789, 0.7109071952999951, 0.5637795958152644, 1.0549018919252924}, // fused multiply-add result: 1.0549018919252926 {0.4584424785756506, 0.6001655953233308, 0.02626515060968944, 0.3014065536855481}, // fused multiply-add result: 0.30140655368554814 {0.539210105890946, 0.9756748149873165, 0.7507630564795985, 1.2768567767840384}, // fused multiply-add result: 1.2768567767840386 {0.7830349733960021, 0.3932509992288867, 0.1304138461737918, 0.4383431318929343}, // fused multiply-add result: 0.43834313189293433 {0.6841751300974551, 0.6530402051353608, 0.524499759549865, 0.9712936268572192}, // fused multiply-add result: 0.9712936268572193 {0.3691117091643448, 0.826454125634742, 0.34768170859156955, 0.6527356034505334}, // fused multiply-add result: 0.6527356034505333 {0.16867966833433606, 0.33136826030698385, 0.8279280961505588, 0.8838231843956668}, // fused multiply-add result: 0.8838231843956669 } check := func(s string, got, expected float64) { if got != expected { fmt.Printf("multiplyAdd: %s, expected %g, got %g\n", s, expected, got) } } for _, t := range tests { check( fmt.Sprintf("float64(%v * %v) + %v", t.x, t.y, t.z), func(x, y, z float64) float64 { return float64(x*y) + z }(t.x, t.y, t.z), t.res) check( fmt.Sprintf("%v += float64(%v * %v)", t.z, t.x, t.y), func(x, y, z float64) float64 { z += float64(x * y) return z }(t.x, t.y, t.z), t.res) } } { // Test that a multiply-accumulate operation with intermediate // rounding forced by a complex128() cast produces the expected // result. // Test cases generated experimentally on a system (s390x) that // supports fused multiply-add instructions. var tests = [...]struct { x, y float64 res complex128 }{ {0.6046602879796196, 0.9405090880450124, (2.754489951983871 + 3i)}, // fused multiply-add result: (2.7544899519838713 + 3i) {0.09696951891448456, 0.30091186058528707, (0.5918204173287407 + 3i)}, // fused multiply-add result: (0.5918204173287408 + 3i) {0.544155573000885, 0.27850762181610883, (1.910974340818764 + 3i)}, // fused multiply-add result: (1.9109743408187638 + 3i) {0.9769168685862624, 0.07429099894984302, (3.0050416047086297 + 3i)}, // fused multiply-add result: (3.00504160470863 + 3i) {0.9269868035744142, 0.9549454404167818, (3.735905851140024 + 3i)}, // fused multiply-add result: (3.7359058511400245 + 3i) {0.7109071952999951, 0.5637795958152644, (2.69650118171525 + 3i)}, // fused multiply-add result: (2.6965011817152496 + 3i) {0.7558235074915978, 0.40380328579570035, (2.671273808270494 + 3i)}, // fused multiply-add result: (2.6712738082704934 + 3i) {0.13065111702897217, 0.9859647293402467, (1.3779180804271633 + 3i)}, // fused multiply-add result: (1.3779180804271631 + 3i) {0.8963417453962161, 0.3220839705208817, (3.0111092067095298 + 3i)}, // fused multiply-add result: (3.01110920670953 + 3i) {0.39998376285699544, 0.497868113342702, (1.697819401913688 + 3i)}, // fused multiply-add result: (1.6978194019136883 + 3i) } check := func(s string, got, expected complex128) { if got != expected { fmt.Printf("multiplyAdd: %s, expected %v, got %v\n", s, expected, got) } } for _, t := range tests { check( fmt.Sprintf("complex128(complex(%v, 1)*3) + complex(%v, 0)", t.x, t.y), func(x, y float64) complex128 { return complex128(complex(x, 1)*3) + complex(y, 0) }(t.x, t.y), t.res) check( fmt.Sprintf("z := complex(%v, 1); z += complex128(complex(%v, 1) * 3)", t.y, t.x), func(x, y float64) complex128 { z := complex(y, 0) z += complex128(complex(x, 1) * 3) return z }(t.x, t.y), t.res) } } } const ( aa = 0x1000000000000000 ab = 0x100000000000000 ac = 0x10000000000000 ad = 0x1000000000000 ba = 0x100000000000 bb = 0x10000000000 bc = 0x1000000000 bd = 0x100000000 ca = 0x10000000 cb = 0x1000000 cc = 0x100000 cd = 0x10000 da = 0x1000 db = 0x100 dc = 0x10 dd = 0x1 ) //go:noinline func compares64_ssa(a, b, c, d float64) (lt, le, eq, ne, ge, gt uint64) { if a < a { lt += aa } if a < b { lt += ab } if a < c { lt += ac } if a < d { lt += ad } if b < a { lt += ba } if b < b { lt += bb } if b < c { lt += bc } if b < d { lt += bd } if c < a { lt += ca } if c < b { lt += cb } if c < c { lt += cc } if c < d { lt += cd } if d < a { lt += da } if d < b { lt += db } if d < c { lt += dc } if d < d { lt += dd } if a <= a { le += aa } if a <= b { le += ab } if a <= c { le += ac } if a <= d { le += ad } if b <= a { le += ba } if b <= b { le += bb } if b <= c { le += bc } if b <= d { le += bd } if c <= a { le += ca } if c <= b { le += cb } if c <= c { le += cc } if c <= d { le += cd } if d <= a { le += da } if d <= b { le += db } if d <= c { le += dc } if d <= d { le += dd } if a == a { eq += aa } if a == b { eq += ab } if a == c { eq += ac } if a == d { eq += ad } if b == a { eq += ba } if b == b { eq += bb } if b == c { eq += bc } if b == d { eq += bd } if c == a { eq += ca } if c == b { eq += cb } if c == c { eq += cc } if c == d { eq += cd } if d == a { eq += da } if d == b { eq += db } if d == c { eq += dc } if d == d { eq += dd } if a != a { ne += aa } if a != b { ne += ab } if a != c { ne += ac } if a != d { ne += ad } if b != a { ne += ba } if b != b { ne += bb } if b != c { ne += bc } if b != d { ne += bd } if c != a { ne += ca } if c != b { ne += cb } if c != c { ne += cc } if c != d { ne += cd } if d != a { ne += da } if d != b { ne += db } if d != c { ne += dc } if d != d { ne += dd } if a >= a { ge += aa } if a >= b { ge += ab } if a >= c { ge += ac } if a >= d { ge += ad } if b >= a { ge += ba } if b >= b { ge += bb } if b >= c { ge += bc } if b >= d { ge += bd } if c >= a { ge += ca } if c >= b { ge += cb } if c >= c { ge += cc } if c >= d { ge += cd } if d >= a { ge += da } if d >= b { ge += db } if d >= c { ge += dc } if d >= d { ge += dd } if a > a { gt += aa } if a > b { gt += ab } if a > c { gt += ac } if a > d { gt += ad } if b > a { gt += ba } if b > b { gt += bb } if b > c { gt += bc } if b > d { gt += bd } if c > a { gt += ca } if c > b { gt += cb } if c > c { gt += cc } if c > d { gt += cd } if d > a { gt += da } if d > b { gt += db } if d > c { gt += dc } if d > d { gt += dd } return } //go:noinline func compares32_ssa(a, b, c, d float32) (lt, le, eq, ne, ge, gt uint64) { if a < a { lt += aa } if a < b { lt += ab } if a < c { lt += ac } if a < d { lt += ad } if b < a { lt += ba } if b < b { lt += bb } if b < c { lt += bc } if b < d { lt += bd } if c < a { lt += ca } if c < b { lt += cb } if c < c { lt += cc } if c < d { lt += cd } if d < a { lt += da } if d < b { lt += db } if d < c { lt += dc } if d < d { lt += dd } if a <= a { le += aa } if a <= b { le += ab } if a <= c { le += ac } if a <= d { le += ad } if b <= a { le += ba } if b <= b { le += bb } if b <= c { le += bc } if b <= d { le += bd } if c <= a { le += ca } if c <= b { le += cb } if c <= c { le += cc } if c <= d { le += cd } if d <= a { le += da } if d <= b { le += db } if d <= c { le += dc } if d <= d { le += dd } if a == a { eq += aa } if a == b { eq += ab } if a == c { eq += ac } if a == d { eq += ad } if b == a { eq += ba } if b == b { eq += bb } if b == c { eq += bc } if b == d { eq += bd } if c == a { eq += ca } if c == b { eq += cb } if c == c { eq += cc } if c == d { eq += cd } if d == a { eq += da } if d == b { eq += db } if d == c { eq += dc } if d == d { eq += dd } if a != a { ne += aa } if a != b { ne += ab } if a != c { ne += ac } if a != d { ne += ad } if b != a { ne += ba } if b != b { ne += bb } if b != c { ne += bc } if b != d { ne += bd } if c != a { ne += ca } if c != b { ne += cb } if c != c { ne += cc } if c != d { ne += cd } if d != a { ne += da } if d != b { ne += db } if d != c { ne += dc } if d != d { ne += dd } if a >= a { ge += aa } if a >= b { ge += ab } if a >= c { ge += ac } if a >= d { ge += ad } if b >= a { ge += ba } if b >= b { ge += bb } if b >= c { ge += bc } if b >= d { ge += bd } if c >= a { ge += ca } if c >= b { ge += cb } if c >= c { ge += cc } if c >= d { ge += cd } if d >= a { ge += da } if d >= b { ge += db } if d >= c { ge += dc } if d >= d { ge += dd } if a > a { gt += aa } if a > b { gt += ab } if a > c { gt += ac } if a > d { gt += ad } if b > a { gt += ba } if b > b { gt += bb } if b > c { gt += bc } if b > d { gt += bd } if c > a { gt += ca } if c > b { gt += cb } if c > c { gt += cc } if c > d { gt += cd } if d > a { gt += da } if d > b { gt += db } if d > c { gt += dc } if d > d { gt += dd } return } //go:noinline func le64_ssa(x, y float64) bool { return x <= y } //go:noinline func ge64_ssa(x, y float64) bool { return x >= y } //go:noinline func lt64_ssa(x, y float64) bool { return x < y } //go:noinline func gt64_ssa(x, y float64) bool { return x > y } //go:noinline func eq64_ssa(x, y float64) bool { return x == y } //go:noinline func ne64_ssa(x, y float64) bool { return x != y } //go:noinline func eqbr64_ssa(x, y float64) float64 { if x == y { return 17 } return 42 } //go:noinline func nebr64_ssa(x, y float64) float64 { if x != y { return 17 } return 42 } //go:noinline func gebr64_ssa(x, y float64) float64 { if x >= y { return 17 } return 42 } //go:noinline func lebr64_ssa(x, y float64) float64 { if x <= y { return 17 } return 42 } //go:noinline func ltbr64_ssa(x, y float64) float64 { if x < y { return 17 } return 42 } //go:noinline func gtbr64_ssa(x, y float64) float64 { if x > y { return 17 } return 42 } //go:noinline func le32_ssa(x, y float32) bool { return x <= y } //go:noinline func ge32_ssa(x, y float32) bool { return x >= y } //go:noinline func lt32_ssa(x, y float32) bool { return x < y } //go:noinline func gt32_ssa(x, y float32) bool { return x > y } //go:noinline func eq32_ssa(x, y float32) bool { return x == y } //go:noinline func ne32_ssa(x, y float32) bool { return x != y } //go:noinline func eqbr32_ssa(x, y float32) float32 { if x == y { return 17 } return 42 } //go:noinline func nebr32_ssa(x, y float32) float32 { if x != y { return 17 } return 42 } //go:noinline func gebr32_ssa(x, y float32) float32 { if x >= y { return 17 } return 42 } //go:noinline func lebr32_ssa(x, y float32) float32 { if x <= y { return 17 } return 42 } //go:noinline func ltbr32_ssa(x, y float32) float32 { if x < y { return 17 } return 42 } //go:noinline func gtbr32_ssa(x, y float32) float32 { if x > y { return 17 } return 42 } //go:noinline func F32toU8_ssa(x float32) uint8 { return uint8(x) } //go:noinline func F32toI8_ssa(x float32) int8 { return int8(x) } //go:noinline func F32toU16_ssa(x float32) uint16 { return uint16(x) } //go:noinline func F32toI16_ssa(x float32) int16 { return int16(x) } //go:noinline func F32toU32_ssa(x float32) uint32 { return uint32(x) } //go:noinline func F32toI32_ssa(x float32) int32 { return int32(x) } //go:noinline func F32toU64_ssa(x float32) uint64 { return uint64(x) } //go:noinline func F32toI64_ssa(x float32) int64 { return int64(x) } //go:noinline func F64toU8_ssa(x float64) uint8 { return uint8(x) } //go:noinline func F64toI8_ssa(x float64) int8 { return int8(x) } //go:noinline func F64toU16_ssa(x float64) uint16 { return uint16(x) } //go:noinline func F64toI16_ssa(x float64) int16 { return int16(x) } //go:noinline func F64toU32_ssa(x float64) uint32 { return uint32(x) } //go:noinline func F64toI32_ssa(x float64) int32 { return int32(x) } //go:noinline func F64toU64_ssa(x float64) uint64 { return uint64(x) } //go:noinline func F64toI64_ssa(x float64) int64 { return int64(x) } func floatsToInts(t *testing.T, x float64, expected int64) { y := float32(x) expectInt64(t, "F64toI8", int64(F64toI8_ssa(x)), expected) expectInt64(t, "F64toI16", int64(F64toI16_ssa(x)), expected) expectInt64(t, "F64toI32", int64(F64toI32_ssa(x)), expected) expectInt64(t, "F64toI64", int64(F64toI64_ssa(x)), expected) expectInt64(t, "F32toI8", int64(F32toI8_ssa(y)), expected) expectInt64(t, "F32toI16", int64(F32toI16_ssa(y)), expected) expectInt64(t, "F32toI32", int64(F32toI32_ssa(y)), expected) expectInt64(t, "F32toI64", int64(F32toI64_ssa(y)), expected) } func floatsToUints(t *testing.T, x float64, expected uint64) { y := float32(x) expectUint64(t, "F64toU8", uint64(F64toU8_ssa(x)), expected) expectUint64(t, "F64toU16", uint64(F64toU16_ssa(x)), expected) expectUint64(t, "F64toU32", uint64(F64toU32_ssa(x)), expected) expectUint64(t, "F64toU64", uint64(F64toU64_ssa(x)), expected) expectUint64(t, "F32toU8", uint64(F32toU8_ssa(y)), expected) expectUint64(t, "F32toU16", uint64(F32toU16_ssa(y)), expected) expectUint64(t, "F32toU32", uint64(F32toU32_ssa(y)), expected) expectUint64(t, "F32toU64", uint64(F32toU64_ssa(y)), expected) } func floatingToIntegerConversionsTest(t *testing.T) { floatsToInts(t, 0.0, 0) floatsToInts(t, 0.5, 0) floatsToInts(t, 0.9, 0) floatsToInts(t, 1.0, 1) floatsToInts(t, 1.5, 1) floatsToInts(t, 127.0, 127) floatsToInts(t, -1.0, -1) floatsToInts(t, -128.0, -128) floatsToUints(t, 0.0, 0) floatsToUints(t, 1.0, 1) floatsToUints(t, 255.0, 255) for j := uint(0); j < 24; j++ { // Avoid hard cases in the construction // of the test inputs. v := int64(1<<62) | int64(1<<(62-j)) w := uint64(v) f := float32(v) d := float64(v) expectUint64(t, "2**62...", F32toU64_ssa(f), w) expectUint64(t, "2**62...", F64toU64_ssa(d), w) expectInt64(t, "2**62...", F32toI64_ssa(f), v) expectInt64(t, "2**62...", F64toI64_ssa(d), v) expectInt64(t, "2**62...", F32toI64_ssa(-f), -v) expectInt64(t, "2**62...", F64toI64_ssa(-d), -v) w += w f += f d += d expectUint64(t, "2**63...", F32toU64_ssa(f), w) expectUint64(t, "2**63...", F64toU64_ssa(d), w) } for j := uint(0); j < 16; j++ { // Avoid hard cases in the construction // of the test inputs. v := int32(1<<30) | int32(1<<(30-j)) w := uint32(v) f := float32(v) d := float64(v) expectUint32(t, "2**30...", F32toU32_ssa(f), w) expectUint32(t, "2**30...", F64toU32_ssa(d), w) expectInt32(t, "2**30...", F32toI32_ssa(f), v) expectInt32(t, "2**30...", F64toI32_ssa(d), v) expectInt32(t, "2**30...", F32toI32_ssa(-f), -v) expectInt32(t, "2**30...", F64toI32_ssa(-d), -v) w += w f += f d += d expectUint32(t, "2**31...", F32toU32_ssa(f), w) expectUint32(t, "2**31...", F64toU32_ssa(d), w) } for j := uint(0); j < 15; j++ { // Avoid hard cases in the construction // of the test inputs. v := int16(1<<14) | int16(1<<(14-j)) w := uint16(v) f := float32(v) d := float64(v) expectUint16(t, "2**14...", F32toU16_ssa(f), w) expectUint16(t, "2**14...", F64toU16_ssa(d), w) expectInt16(t, "2**14...", F32toI16_ssa(f), v) expectInt16(t, "2**14...", F64toI16_ssa(d), v) expectInt16(t, "2**14...", F32toI16_ssa(-f), -v) expectInt16(t, "2**14...", F64toI16_ssa(-d), -v) w += w f += f d += d expectUint16(t, "2**15...", F32toU16_ssa(f), w) expectUint16(t, "2**15...", F64toU16_ssa(d), w) } expectInt32(t, "-2147483648", F32toI32_ssa(-2147483648), -2147483648) expectInt32(t, "-2147483648", F64toI32_ssa(-2147483648), -2147483648) expectInt32(t, "-2147483647", F64toI32_ssa(-2147483647), -2147483647) expectUint32(t, "4294967295", F64toU32_ssa(4294967295), 4294967295) expectInt16(t, "-32768", F64toI16_ssa(-32768), -32768) expectInt16(t, "-32768", F32toI16_ssa(-32768), -32768) // NB more of a pain to do these for 32-bit because of lost bits in Float32 mantissa expectInt16(t, "32767", F64toI16_ssa(32767), 32767) expectInt16(t, "32767", F32toI16_ssa(32767), 32767) expectUint16(t, "32767", F64toU16_ssa(32767), 32767) expectUint16(t, "32767", F32toU16_ssa(32767), 32767) expectUint16(t, "65535", F64toU16_ssa(65535), 65535) expectUint16(t, "65535", F32toU16_ssa(65535), 65535) } func fail64(s string, f func(a, b float64) float64, a, b, e float64) { d := f(a, b) if d != e { fmt.Printf("For (float64) %v %v %v, expected %v, got %v\n", a, s, b, e, d) } } func fail64bool(s string, f func(a, b float64) bool, a, b float64, e bool) { d := f(a, b) if d != e { fmt.Printf("For (float64) %v %v %v, expected %v, got %v\n", a, s, b, e, d) } } func fail32(s string, f func(a, b float32) float32, a, b, e float32) { d := f(a, b) if d != e { fmt.Printf("For (float32) %v %v %v, expected %v, got %v\n", a, s, b, e, d) } } func fail32bool(s string, f func(a, b float32) bool, a, b float32, e bool) { d := f(a, b) if d != e { fmt.Printf("For (float32) %v %v %v, expected %v, got %v\n", a, s, b, e, d) } } func expect64(t *testing.T, s string, x, expected float64) { if x != expected { println("F64 Expected", expected, "for", s, ", got", x) } } func expect32(t *testing.T, s string, x, expected float32) { if x != expected { println("F32 Expected", expected, "for", s, ", got", x) } } func expectUint64(t *testing.T, s string, x, expected uint64) { if x != expected { fmt.Printf("U64 Expected 0x%016x for %s, got 0x%016x\n", expected, s, x) } } func expectInt64(t *testing.T, s string, x, expected int64) { if x != expected { fmt.Printf("%s: Expected 0x%016x, got 0x%016x\n", s, expected, x) } } func expectUint32(t *testing.T, s string, x, expected uint32) { if x != expected { fmt.Printf("U32 %s: Expected 0x%08x, got 0x%08x\n", s, expected, x) } } func expectInt32(t *testing.T, s string, x, expected int32) { if x != expected { fmt.Printf("I32 %s: Expected 0x%08x, got 0x%08x\n", s, expected, x) } } func expectUint16(t *testing.T, s string, x, expected uint16) { if x != expected { fmt.Printf("U16 %s: Expected 0x%04x, got 0x%04x\n", s, expected, x) } } func expectInt16(t *testing.T, s string, x, expected int16) { if x != expected { fmt.Printf("I16 %s: Expected 0x%04x, got 0x%04x\n", s, expected, x) } } func expectAll64(t *testing.T, s string, expected, a, b, c, d, e, f, g, h, i float64) { expect64(t, s+":a", a, expected) expect64(t, s+":b", b, expected) expect64(t, s+":c", c, expected) expect64(t, s+":d", d, expected) expect64(t, s+":e", e, expected) expect64(t, s+":f", f, expected) expect64(t, s+":g", g, expected) } func expectAll32(t *testing.T, s string, expected, a, b, c, d, e, f, g, h, i float32) { expect32(t, s+":a", a, expected) expect32(t, s+":b", b, expected) expect32(t, s+":c", c, expected) expect32(t, s+":d", d, expected) expect32(t, s+":e", e, expected) expect32(t, s+":f", f, expected) expect32(t, s+":g", g, expected) } var ev64 [2]float64 = [2]float64{42.0, 17.0} var ev32 [2]float32 = [2]float32{42.0, 17.0} func cmpOpTest(t *testing.T, s string, f func(a, b float64) bool, g func(a, b float64) float64, ff func(a, b float32) bool, gg func(a, b float32) float32, zero, one, inf, nan float64, result uint) { fail64bool(s, f, zero, zero, result>>16&1 == 1) fail64bool(s, f, zero, one, result>>12&1 == 1) fail64bool(s, f, zero, inf, result>>8&1 == 1) fail64bool(s, f, zero, nan, result>>4&1 == 1) fail64bool(s, f, nan, nan, result&1 == 1) fail64(s, g, zero, zero, ev64[result>>16&1]) fail64(s, g, zero, one, ev64[result>>12&1]) fail64(s, g, zero, inf, ev64[result>>8&1]) fail64(s, g, zero, nan, ev64[result>>4&1]) fail64(s, g, nan, nan, ev64[result>>0&1]) { zero := float32(zero) one := float32(one) inf := float32(inf) nan := float32(nan) fail32bool(s, ff, zero, zero, (result>>16)&1 == 1) fail32bool(s, ff, zero, one, (result>>12)&1 == 1) fail32bool(s, ff, zero, inf, (result>>8)&1 == 1) fail32bool(s, ff, zero, nan, (result>>4)&1 == 1) fail32bool(s, ff, nan, nan, result&1 == 1) fail32(s, gg, zero, zero, ev32[(result>>16)&1]) fail32(s, gg, zero, one, ev32[(result>>12)&1]) fail32(s, gg, zero, inf, ev32[(result>>8)&1]) fail32(s, gg, zero, nan, ev32[(result>>4)&1]) fail32(s, gg, nan, nan, ev32[(result>>0)&1]) } } func expectCx128(t *testing.T, s string, x, expected complex128) { if x != expected { t.Errorf("Cx 128 Expected %f for %s, got %f", expected, s, x) } } func expectCx64(t *testing.T, s string, x, expected complex64) { if x != expected { t.Errorf("Cx 64 Expected %f for %s, got %f", expected, s, x) } } //go:noinline func cx128sum_ssa(a, b complex128) complex128 { return a + b } //go:noinline func cx128diff_ssa(a, b complex128) complex128 { return a - b } //go:noinline func cx128prod_ssa(a, b complex128) complex128 { return a * b } //go:noinline func cx128quot_ssa(a, b complex128) complex128 { return a / b } //go:noinline func cx128neg_ssa(a complex128) complex128 { return -a } //go:noinline func cx128real_ssa(a complex128) float64 { return real(a) } //go:noinline func cx128imag_ssa(a complex128) float64 { return imag(a) } //go:noinline func cx128cnst_ssa(a complex128) complex128 { b := 2 + 3i return a * b } //go:noinline func cx64sum_ssa(a, b complex64) complex64 { return a + b } //go:noinline func cx64diff_ssa(a, b complex64) complex64 { return a - b } //go:noinline func cx64prod_ssa(a, b complex64) complex64 { return a * b } //go:noinline func cx64quot_ssa(a, b complex64) complex64 { return a / b } //go:noinline func cx64neg_ssa(a complex64) complex64 { return -a } //go:noinline func cx64real_ssa(a complex64) float32 { return real(a) } //go:noinline func cx64imag_ssa(a complex64) float32 { return imag(a) } //go:noinline func cx128eq_ssa(a, b complex128) bool { return a == b } //go:noinline func cx128ne_ssa(a, b complex128) bool { return a != b } //go:noinline func cx64eq_ssa(a, b complex64) bool { return a == b } //go:noinline func cx64ne_ssa(a, b complex64) bool { return a != b } func expectTrue(t *testing.T, s string, b bool) { if !b { t.Errorf("expected true for %s, got false", s) } } func expectFalse(t *testing.T, s string, b bool) { if b { t.Errorf("expected false for %s, got true", s) } } func complexTest128(t *testing.T) { var a complex128 = 1 + 2i var b complex128 = 3 + 6i sum := cx128sum_ssa(b, a) diff := cx128diff_ssa(b, a) prod := cx128prod_ssa(b, a) quot := cx128quot_ssa(b, a) neg := cx128neg_ssa(a) r := cx128real_ssa(a) i := cx128imag_ssa(a) cnst := cx128cnst_ssa(a) c1 := cx128eq_ssa(a, a) c2 := cx128eq_ssa(a, b) c3 := cx128ne_ssa(a, a) c4 := cx128ne_ssa(a, b) expectCx128(t, "sum", sum, 4+8i) expectCx128(t, "diff", diff, 2+4i) expectCx128(t, "prod", prod, -9+12i) expectCx128(t, "quot", quot, 3+0i) expectCx128(t, "neg", neg, -1-2i) expect64(t, "real", r, 1) expect64(t, "imag", i, 2) expectCx128(t, "cnst", cnst, -4+7i) expectTrue(t, fmt.Sprintf("%v==%v", a, a), c1) expectFalse(t, fmt.Sprintf("%v==%v", a, b), c2) expectFalse(t, fmt.Sprintf("%v!=%v", a, a), c3) expectTrue(t, fmt.Sprintf("%v!=%v", a, b), c4) } func complexTest64(t *testing.T) { var a complex64 = 1 + 2i var b complex64 = 3 + 6i sum := cx64sum_ssa(b, a) diff := cx64diff_ssa(b, a) prod := cx64prod_ssa(b, a) quot := cx64quot_ssa(b, a) neg := cx64neg_ssa(a) r := cx64real_ssa(a) i := cx64imag_ssa(a) c1 := cx64eq_ssa(a, a) c2 := cx64eq_ssa(a, b) c3 := cx64ne_ssa(a, a) c4 := cx64ne_ssa(a, b) expectCx64(t, "sum", sum, 4+8i) expectCx64(t, "diff", diff, 2+4i) expectCx64(t, "prod", prod, -9+12i) expectCx64(t, "quot", quot, 3+0i) expectCx64(t, "neg", neg, -1-2i) expect32(t, "real", r, 1) expect32(t, "imag", i, 2) expectTrue(t, fmt.Sprintf("%v==%v", a, a), c1) expectFalse(t, fmt.Sprintf("%v==%v", a, b), c2) expectFalse(t, fmt.Sprintf("%v!=%v", a, a), c3) expectTrue(t, fmt.Sprintf("%v!=%v", a, b), c4) } // TestFP tests that we get the right answer for floating point expressions. func TestFP(t *testing.T) { a := 3.0 b := 4.0 c := float32(3.0) d := float32(4.0) tiny := float32(1.5e-45) // smallest f32 denorm = 2**(-149) dtiny := float64(tiny) // well within range of f64 fail64("+", add64_ssa, a, b, 7.0) fail64("*", mul64_ssa, a, b, 12.0) fail64("-", sub64_ssa, a, b, -1.0) fail64("/", div64_ssa, a, b, 0.75) fail64("neg", neg64_ssa, a, b, -7) fail32("+", add32_ssa, c, d, 7.0) fail32("*", mul32_ssa, c, d, 12.0) fail32("-", sub32_ssa, c, d, -1.0) fail32("/", div32_ssa, c, d, 0.75) fail32("neg", neg32_ssa, c, d, -7) // denorm-squared should underflow to zero. fail32("*", mul32_ssa, tiny, tiny, 0) // but should not underflow in float and in fact is exactly representable. fail64("*", mul64_ssa, dtiny, dtiny, 1.9636373861190906e-90) // Intended to create register pressure which forces // asymmetric op into different code paths. aa, ab, ac, ad, ba, bb, bc, bd, ca, cb, cc, cd, da, db, dc, dd := manysub_ssa(1000.0, 100.0, 10.0, 1.0) expect64(t, "aa", aa, 11.0) expect64(t, "ab", ab, 900.0) expect64(t, "ac", ac, 990.0) expect64(t, "ad", ad, 999.0) expect64(t, "ba", ba, -900.0) expect64(t, "bb", bb, 22.0) expect64(t, "bc", bc, 90.0) expect64(t, "bd", bd, 99.0) expect64(t, "ca", ca, -990.0) expect64(t, "cb", cb, -90.0) expect64(t, "cc", cc, 33.0) expect64(t, "cd", cd, 9.0) expect64(t, "da", da, -999.0) expect64(t, "db", db, -99.0) expect64(t, "dc", dc, -9.0) expect64(t, "dd", dd, 44.0) integer2floatConversions(t) multiplyAdd(t) var zero64 float64 = 0.0 var one64 float64 = 1.0 var inf64 float64 = 1.0 / zero64 var nan64 float64 = sub64_ssa(inf64, inf64) cmpOpTest(t, "!=", ne64_ssa, nebr64_ssa, ne32_ssa, nebr32_ssa, zero64, one64, inf64, nan64, 0x01111) cmpOpTest(t, "==", eq64_ssa, eqbr64_ssa, eq32_ssa, eqbr32_ssa, zero64, one64, inf64, nan64, 0x10000) cmpOpTest(t, "<=", le64_ssa, lebr64_ssa, le32_ssa, lebr32_ssa, zero64, one64, inf64, nan64, 0x11100) cmpOpTest(t, "<", lt64_ssa, ltbr64_ssa, lt32_ssa, ltbr32_ssa, zero64, one64, inf64, nan64, 0x01100) cmpOpTest(t, ">", gt64_ssa, gtbr64_ssa, gt32_ssa, gtbr32_ssa, zero64, one64, inf64, nan64, 0x00000) cmpOpTest(t, ">=", ge64_ssa, gebr64_ssa, ge32_ssa, gebr32_ssa, zero64, one64, inf64, nan64, 0x10000) { lt, le, eq, ne, ge, gt := compares64_ssa(0.0, 1.0, inf64, nan64) expectUint64(t, "lt", lt, 0x0110001000000000) expectUint64(t, "le", le, 0x1110011000100000) expectUint64(t, "eq", eq, 0x1000010000100000) expectUint64(t, "ne", ne, 0x0111101111011111) expectUint64(t, "ge", ge, 0x1000110011100000) expectUint64(t, "gt", gt, 0x0000100011000000) // fmt.Printf("lt=0x%016x, le=0x%016x, eq=0x%016x, ne=0x%016x, ge=0x%016x, gt=0x%016x\n", // lt, le, eq, ne, ge, gt) } { lt, le, eq, ne, ge, gt := compares32_ssa(0.0, 1.0, float32(inf64), float32(nan64)) expectUint64(t, "lt", lt, 0x0110001000000000) expectUint64(t, "le", le, 0x1110011000100000) expectUint64(t, "eq", eq, 0x1000010000100000) expectUint64(t, "ne", ne, 0x0111101111011111) expectUint64(t, "ge", ge, 0x1000110011100000) expectUint64(t, "gt", gt, 0x0000100011000000) } floatingToIntegerConversionsTest(t) complexTest128(t) complexTest64(t) } PK ! ��r< < testdata/closure_test.gonu �[��� // Copyright 2015 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. // closure.go tests closure operations. package main import "testing" //go:noinline func testCFunc_ssa() int { a := 0 b := func() { switch { } a++ } b() b() return a } func testCFunc(t *testing.T) { if want, got := 2, testCFunc_ssa(); got != want { t.Errorf("expected %d, got %d", want, got) } } // TestClosure tests closure related behavior. func TestClosure(t *testing.T) { testCFunc(t) } PK ! ��l$ $ testdata/loadstore_test.gonu �[��� // Copyright 2015 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. // Tests load/store ordering package main import "testing" // testLoadStoreOrder tests for reordering of stores/loads. func testLoadStoreOrder(t *testing.T) { z := uint32(1000) if testLoadStoreOrder_ssa(&z, 100) == 0 { t.Errorf("testLoadStoreOrder failed") } } //go:noinline func testLoadStoreOrder_ssa(z *uint32, prec uint) int { old := *z // load *z = uint32(prec) // store if *z < old { // load return 1 } return 0 } func testStoreSize(t *testing.T) { a := [4]uint16{11, 22, 33, 44} testStoreSize_ssa(&a[0], &a[2], 77) want := [4]uint16{77, 22, 33, 44} if a != want { t.Errorf("testStoreSize failed. want = %d, got = %d", want, a) } } //go:noinline func testStoreSize_ssa(p *uint16, q *uint16, v uint32) { // Test to make sure that (Store ptr (Trunc32to16 val) mem) // does not end up as a 32-bit store. It must stay a 16 bit store // even when Trunc32to16 is rewritten to be a nop. // To ensure that we get rewrite the Trunc32to16 before // we rewrite the Store, we force the truncate into an // earlier basic block by using it on both branches. w := uint16(v) if p != nil { *p = w } else { *q = w } } //go:noinline func testExtStore_ssa(p *byte, b bool) int { x := *p *p = 7 if b { return int(x) } return 0 } func testExtStore(t *testing.T) { const start = 8 var b byte = start if got := testExtStore_ssa(&b, true); got != start { t.Errorf("testExtStore failed. want = %d, got = %d", start, got) } } var b int // testDeadStorePanic_ssa ensures that we don't optimize away stores // that could be read by after recover(). Modeled after fixedbugs/issue1304. // //go:noinline func testDeadStorePanic_ssa(a int) (r int) { defer func() { recover() r = a }() a = 2 // store b := a - a // optimized to zero c := 4 a = c / b // store, but panics a = 3 // store r = a return } func testDeadStorePanic(t *testing.T) { if want, got := 2, testDeadStorePanic_ssa(1); want != got { t.Errorf("testDeadStorePanic failed. want = %d, got = %d", want, got) } } //go:noinline func loadHitStore8(x int8, p *int8) int32 { x *= x // try to trash high bits (arch-dependent) *p = x // store return int32(*p) // load and cast } //go:noinline func loadHitStoreU8(x uint8, p *uint8) uint32 { x *= x // try to trash high bits (arch-dependent) *p = x // store return uint32(*p) // load and cast } //go:noinline func loadHitStore16(x int16, p *int16) int32 { x *= x // try to trash high bits (arch-dependent) *p = x // store return int32(*p) // load and cast } //go:noinline func loadHitStoreU16(x uint16, p *uint16) uint32 { x *= x // try to trash high bits (arch-dependent) *p = x // store return uint32(*p) // load and cast } //go:noinline func loadHitStore32(x int32, p *int32) int64 { x *= x // try to trash high bits (arch-dependent) *p = x // store return int64(*p) // load and cast } //go:noinline func loadHitStoreU32(x uint32, p *uint32) uint64 { x *= x // try to trash high bits (arch-dependent) *p = x // store return uint64(*p) // load and cast } func testLoadHitStore(t *testing.T) { // Test that sign/zero extensions are kept when a load-hit-store // is replaced by a register-register move. { var in int8 = (1 << 6) + 1 var p int8 got := loadHitStore8(in, &p) want := int32(in * in) if got != want { t.Errorf("testLoadHitStore (int8) failed. want = %d, got = %d", want, got) } } { var in uint8 = (1 << 6) + 1 var p uint8 got := loadHitStoreU8(in, &p) want := uint32(in * in) if got != want { t.Errorf("testLoadHitStore (uint8) failed. want = %d, got = %d", want, got) } } { var in int16 = (1 << 10) + 1 var p int16 got := loadHitStore16(in, &p) want := int32(in * in) if got != want { t.Errorf("testLoadHitStore (int16) failed. want = %d, got = %d", want, got) } } { var in uint16 = (1 << 10) + 1 var p uint16 got := loadHitStoreU16(in, &p) want := uint32(in * in) if got != want { t.Errorf("testLoadHitStore (uint16) failed. want = %d, got = %d", want, got) } } { var in int32 = (1 << 30) + 1 var p int32 got := loadHitStore32(in, &p) want := int64(in * in) if got != want { t.Errorf("testLoadHitStore (int32) failed. want = %d, got = %d", want, got) } } { var in uint32 = (1 << 30) + 1 var p uint32 got := loadHitStoreU32(in, &p) want := uint64(in * in) if got != want { t.Errorf("testLoadHitStore (uint32) failed. want = %d, got = %d", want, got) } } } func TestLoadStore(t *testing.T) { testLoadStoreOrder(t) testStoreSize(t) testExtStore(t) testDeadStorePanic(t) testLoadHitStore(t) } PK ! ��<� <� testdata/cmpConst_test.gonu �[��� // Code generated by gen/cmpConstGen.go. DO NOT EDIT. package main import ( "reflect" "runtime" "testing" ) // results show the expected result for the elements left of, equal to and right of the index. type result struct{ l, e, r bool } var ( eq = result{l: false, e: true, r: false} ne = result{l: true, e: false, r: true} lt = result{l: true, e: false, r: false} le = result{l: true, e: true, r: false} gt = result{l: false, e: false, r: true} ge = result{l: false, e: true, r: true} ) // uint64 tests var uint64_vals = []uint64{ 0, 1, 126, 127, 128, 254, 255, 256, 32766, 32767, 32768, 65534, 65535, 65536, 2147483646, 2147483647, 2147483648, 4278190080, 4294967294, 4294967295, 4294967296, 1095216660480, 9223372036854775806, 9223372036854775807, 9223372036854775808, 18374686479671623680, 18446744073709551614, 18446744073709551615, } func lt_0_uint64(x uint64) bool { return x < 0 } func le_0_uint64(x uint64) bool { return x <= 0 } func gt_0_uint64(x uint64) bool { return x > 0 } func ge_0_uint64(x uint64) bool { return x >= 0 } func eq_0_uint64(x uint64) bool { return x == 0 } func ne_0_uint64(x uint64) bool { return x != 0 } func lt_1_uint64(x uint64) bool { return x < 1 } func le_1_uint64(x uint64) bool { return x <= 1 } func gt_1_uint64(x uint64) bool { return x > 1 } func ge_1_uint64(x uint64) bool { return x >= 1 } func eq_1_uint64(x uint64) bool { return x == 1 } func ne_1_uint64(x uint64) bool { return x != 1 } func lt_126_uint64(x uint64) bool { return x < 126 } func le_126_uint64(x uint64) bool { return x <= 126 } func gt_126_uint64(x uint64) bool { return x > 126 } func ge_126_uint64(x uint64) bool { return x >= 126 } func eq_126_uint64(x uint64) bool { return x == 126 } func ne_126_uint64(x uint64) bool { return x != 126 } func lt_127_uint64(x uint64) bool { return x < 127 } func le_127_uint64(x uint64) bool { return x <= 127 } func gt_127_uint64(x uint64) bool { return x > 127 } func ge_127_uint64(x uint64) bool { return x >= 127 } func eq_127_uint64(x uint64) bool { return x == 127 } func ne_127_uint64(x uint64) bool { return x != 127 } func lt_128_uint64(x uint64) bool { return x < 128 } func le_128_uint64(x uint64) bool { return x <= 128 } func gt_128_uint64(x uint64) bool { return x > 128 } func ge_128_uint64(x uint64) bool { return x >= 128 } func eq_128_uint64(x uint64) bool { return x == 128 } func ne_128_uint64(x uint64) bool { return x != 128 } func lt_254_uint64(x uint64) bool { return x < 254 } func le_254_uint64(x uint64) bool { return x <= 254 } func gt_254_uint64(x uint64) bool { return x > 254 } func ge_254_uint64(x uint64) bool { return x >= 254 } func eq_254_uint64(x uint64) bool { return x == 254 } func ne_254_uint64(x uint64) bool { return x != 254 } func lt_255_uint64(x uint64) bool { return x < 255 } func le_255_uint64(x uint64) bool { return x <= 255 } func gt_255_uint64(x uint64) bool { return x > 255 } func ge_255_uint64(x uint64) bool { return x >= 255 } func eq_255_uint64(x uint64) bool { return x == 255 } func ne_255_uint64(x uint64) bool { return x != 255 } func lt_256_uint64(x uint64) bool { return x < 256 } func le_256_uint64(x uint64) bool { return x <= 256 } func gt_256_uint64(x uint64) bool { return x > 256 } func ge_256_uint64(x uint64) bool { return x >= 256 } func eq_256_uint64(x uint64) bool { return x == 256 } func ne_256_uint64(x uint64) bool { return x != 256 } func lt_32766_uint64(x uint64) bool { return x < 32766 } func le_32766_uint64(x uint64) bool { return x <= 32766 } func gt_32766_uint64(x uint64) bool { return x > 32766 } func ge_32766_uint64(x uint64) bool { return x >= 32766 } func eq_32766_uint64(x uint64) bool { return x == 32766 } func ne_32766_uint64(x uint64) bool { return x != 32766 } func lt_32767_uint64(x uint64) bool { return x < 32767 } func le_32767_uint64(x uint64) bool { return x <= 32767 } func gt_32767_uint64(x uint64) bool { return x > 32767 } func ge_32767_uint64(x uint64) bool { return x >= 32767 } func eq_32767_uint64(x uint64) bool { return x == 32767 } func ne_32767_uint64(x uint64) bool { return x != 32767 } func lt_32768_uint64(x uint64) bool { return x < 32768 } func le_32768_uint64(x uint64) bool { return x <= 32768 } func gt_32768_uint64(x uint64) bool { return x > 32768 } func ge_32768_uint64(x uint64) bool { return x >= 32768 } func eq_32768_uint64(x uint64) bool { return x == 32768 } func ne_32768_uint64(x uint64) bool { return x != 32768 } func lt_65534_uint64(x uint64) bool { return x < 65534 } func le_65534_uint64(x uint64) bool { return x <= 65534 } func gt_65534_uint64(x uint64) bool { return x > 65534 } func ge_65534_uint64(x uint64) bool { return x >= 65534 } func eq_65534_uint64(x uint64) bool { return x == 65534 } func ne_65534_uint64(x uint64) bool { return x != 65534 } func lt_65535_uint64(x uint64) bool { return x < 65535 } func le_65535_uint64(x uint64) bool { return x <= 65535 } func gt_65535_uint64(x uint64) bool { return x > 65535 } func ge_65535_uint64(x uint64) bool { return x >= 65535 } func eq_65535_uint64(x uint64) bool { return x == 65535 } func ne_65535_uint64(x uint64) bool { return x != 65535 } func lt_65536_uint64(x uint64) bool { return x < 65536 } func le_65536_uint64(x uint64) bool { return x <= 65536 } func gt_65536_uint64(x uint64) bool { return x > 65536 } func ge_65536_uint64(x uint64) bool { return x >= 65536 } func eq_65536_uint64(x uint64) bool { return x == 65536 } func ne_65536_uint64(x uint64) bool { return x != 65536 } func lt_2147483646_uint64(x uint64) bool { return x < 2147483646 } func le_2147483646_uint64(x uint64) bool { return x <= 2147483646 } func gt_2147483646_uint64(x uint64) bool { return x > 2147483646 } func ge_2147483646_uint64(x uint64) bool { return x >= 2147483646 } func eq_2147483646_uint64(x uint64) bool { return x == 2147483646 } func ne_2147483646_uint64(x uint64) bool { return x != 2147483646 } func lt_2147483647_uint64(x uint64) bool { return x < 2147483647 } func le_2147483647_uint64(x uint64) bool { return x <= 2147483647 } func gt_2147483647_uint64(x uint64) bool { return x > 2147483647 } func ge_2147483647_uint64(x uint64) bool { return x >= 2147483647 } func eq_2147483647_uint64(x uint64) bool { return x == 2147483647 } func ne_2147483647_uint64(x uint64) bool { return x != 2147483647 } func lt_2147483648_uint64(x uint64) bool { return x < 2147483648 } func le_2147483648_uint64(x uint64) bool { return x <= 2147483648 } func gt_2147483648_uint64(x uint64) bool { return x > 2147483648 } func ge_2147483648_uint64(x uint64) bool { return x >= 2147483648 } func eq_2147483648_uint64(x uint64) bool { return x == 2147483648 } func ne_2147483648_uint64(x uint64) bool { return x != 2147483648 } func lt_4278190080_uint64(x uint64) bool { return x < 4278190080 } func le_4278190080_uint64(x uint64) bool { return x <= 4278190080 } func gt_4278190080_uint64(x uint64) bool { return x > 4278190080 } func ge_4278190080_uint64(x uint64) bool { return x >= 4278190080 } func eq_4278190080_uint64(x uint64) bool { return x == 4278190080 } func ne_4278190080_uint64(x uint64) bool { return x != 4278190080 } func lt_4294967294_uint64(x uint64) bool { return x < 4294967294 } func le_4294967294_uint64(x uint64) bool { return x <= 4294967294 } func gt_4294967294_uint64(x uint64) bool { return x > 4294967294 } func ge_4294967294_uint64(x uint64) bool { return x >= 4294967294 } func eq_4294967294_uint64(x uint64) bool { return x == 4294967294 } func ne_4294967294_uint64(x uint64) bool { return x != 4294967294 } func lt_4294967295_uint64(x uint64) bool { return x < 4294967295 } func le_4294967295_uint64(x uint64) bool { return x <= 4294967295 } func gt_4294967295_uint64(x uint64) bool { return x > 4294967295 } func ge_4294967295_uint64(x uint64) bool { return x >= 4294967295 } func eq_4294967295_uint64(x uint64) bool { return x == 4294967295 } func ne_4294967295_uint64(x uint64) bool { return x != 4294967295 } func lt_4294967296_uint64(x uint64) bool { return x < 4294967296 } func le_4294967296_uint64(x uint64) bool { return x <= 4294967296 } func gt_4294967296_uint64(x uint64) bool { return x > 4294967296 } func ge_4294967296_uint64(x uint64) bool { return x >= 4294967296 } func eq_4294967296_uint64(x uint64) bool { return x == 4294967296 } func ne_4294967296_uint64(x uint64) bool { return x != 4294967296 } func lt_1095216660480_uint64(x uint64) bool { return x < 1095216660480 } func le_1095216660480_uint64(x uint64) bool { return x <= 1095216660480 } func gt_1095216660480_uint64(x uint64) bool { return x > 1095216660480 } func ge_1095216660480_uint64(x uint64) bool { return x >= 1095216660480 } func eq_1095216660480_uint64(x uint64) bool { return x == 1095216660480 } func ne_1095216660480_uint64(x uint64) bool { return x != 1095216660480 } func lt_9223372036854775806_uint64(x uint64) bool { return x < 9223372036854775806 } func le_9223372036854775806_uint64(x uint64) bool { return x <= 9223372036854775806 } func gt_9223372036854775806_uint64(x uint64) bool { return x > 9223372036854775806 } func ge_9223372036854775806_uint64(x uint64) bool { return x >= 9223372036854775806 } func eq_9223372036854775806_uint64(x uint64) bool { return x == 9223372036854775806 } func ne_9223372036854775806_uint64(x uint64) bool { return x != 9223372036854775806 } func lt_9223372036854775807_uint64(x uint64) bool { return x < 9223372036854775807 } func le_9223372036854775807_uint64(x uint64) bool { return x <= 9223372036854775807 } func gt_9223372036854775807_uint64(x uint64) bool { return x > 9223372036854775807 } func ge_9223372036854775807_uint64(x uint64) bool { return x >= 9223372036854775807 } func eq_9223372036854775807_uint64(x uint64) bool { return x == 9223372036854775807 } func ne_9223372036854775807_uint64(x uint64) bool { return x != 9223372036854775807 } func lt_9223372036854775808_uint64(x uint64) bool { return x < 9223372036854775808 } func le_9223372036854775808_uint64(x uint64) bool { return x <= 9223372036854775808 } func gt_9223372036854775808_uint64(x uint64) bool { return x > 9223372036854775808 } func ge_9223372036854775808_uint64(x uint64) bool { return x >= 9223372036854775808 } func eq_9223372036854775808_uint64(x uint64) bool { return x == 9223372036854775808 } func ne_9223372036854775808_uint64(x uint64) bool { return x != 9223372036854775808 } func lt_18374686479671623680_uint64(x uint64) bool { return x < 18374686479671623680 } func le_18374686479671623680_uint64(x uint64) bool { return x <= 18374686479671623680 } func gt_18374686479671623680_uint64(x uint64) bool { return x > 18374686479671623680 } func ge_18374686479671623680_uint64(x uint64) bool { return x >= 18374686479671623680 } func eq_18374686479671623680_uint64(x uint64) bool { return x == 18374686479671623680 } func ne_18374686479671623680_uint64(x uint64) bool { return x != 18374686479671623680 } func lt_18446744073709551614_uint64(x uint64) bool { return x < 18446744073709551614 } func le_18446744073709551614_uint64(x uint64) bool { return x <= 18446744073709551614 } func gt_18446744073709551614_uint64(x uint64) bool { return x > 18446744073709551614 } func ge_18446744073709551614_uint64(x uint64) bool { return x >= 18446744073709551614 } func eq_18446744073709551614_uint64(x uint64) bool { return x == 18446744073709551614 } func ne_18446744073709551614_uint64(x uint64) bool { return x != 18446744073709551614 } func lt_18446744073709551615_uint64(x uint64) bool { return x < 18446744073709551615 } func le_18446744073709551615_uint64(x uint64) bool { return x <= 18446744073709551615 } func gt_18446744073709551615_uint64(x uint64) bool { return x > 18446744073709551615 } func ge_18446744073709551615_uint64(x uint64) bool { return x >= 18446744073709551615 } func eq_18446744073709551615_uint64(x uint64) bool { return x == 18446744073709551615 } func ne_18446744073709551615_uint64(x uint64) bool { return x != 18446744073709551615 } var uint64_tests = []struct { idx int // index of the constant used exp result // expected results fn func(uint64) bool }{ {idx: 0, exp: lt, fn: lt_0_uint64}, {idx: 0, exp: le, fn: le_0_uint64}, {idx: 0, exp: gt, fn: gt_0_uint64}, {idx: 0, exp: ge, fn: ge_0_uint64}, {idx: 0, exp: eq, fn: eq_0_uint64}, {idx: 0, exp: ne, fn: ne_0_uint64}, {idx: 1, exp: lt, fn: lt_1_uint64}, {idx: 1, exp: le, fn: le_1_uint64}, {idx: 1, exp: gt, fn: gt_1_uint64}, {idx: 1, exp: ge, fn: ge_1_uint64}, {idx: 1, exp: eq, fn: eq_1_uint64}, {idx: 1, exp: ne, fn: ne_1_uint64}, {idx: 2, exp: lt, fn: lt_126_uint64}, {idx: 2, exp: le, fn: le_126_uint64}, {idx: 2, exp: gt, fn: gt_126_uint64}, {idx: 2, exp: ge, fn: ge_126_uint64}, {idx: 2, exp: eq, fn: eq_126_uint64}, {idx: 2, exp: ne, fn: ne_126_uint64}, {idx: 3, exp: lt, fn: lt_127_uint64}, {idx: 3, exp: le, fn: le_127_uint64}, {idx: 3, exp: gt, fn: gt_127_uint64}, {idx: 3, exp: ge, fn: ge_127_uint64}, {idx: 3, exp: eq, fn: eq_127_uint64}, {idx: 3, exp: ne, fn: ne_127_uint64}, {idx: 4, exp: lt, fn: lt_128_uint64}, {idx: 4, exp: le, fn: le_128_uint64}, {idx: 4, exp: gt, fn: gt_128_uint64}, {idx: 4, exp: ge, fn: ge_128_uint64}, {idx: 4, exp: eq, fn: eq_128_uint64}, {idx: 4, exp: ne, fn: ne_128_uint64}, {idx: 5, exp: lt, fn: lt_254_uint64}, {idx: 5, exp: le, fn: le_254_uint64}, {idx: 5, exp: gt, fn: gt_254_uint64}, {idx: 5, exp: ge, fn: ge_254_uint64}, {idx: 5, exp: eq, fn: eq_254_uint64}, {idx: 5, exp: ne, fn: ne_254_uint64}, {idx: 6, exp: lt, fn: lt_255_uint64}, {idx: 6, exp: le, fn: le_255_uint64}, {idx: 6, exp: gt, fn: gt_255_uint64}, {idx: 6, exp: ge, fn: ge_255_uint64}, {idx: 6, exp: eq, fn: eq_255_uint64}, {idx: 6, exp: ne, fn: ne_255_uint64}, {idx: 7, exp: lt, fn: lt_256_uint64}, {idx: 7, exp: le, fn: le_256_uint64}, {idx: 7, exp: gt, fn: gt_256_uint64}, {idx: 7, exp: ge, fn: ge_256_uint64}, {idx: 7, exp: eq, fn: eq_256_uint64}, {idx: 7, exp: ne, fn: ne_256_uint64}, {idx: 8, exp: lt, fn: lt_32766_uint64}, {idx: 8, exp: le, fn: le_32766_uint64}, {idx: 8, exp: gt, fn: gt_32766_uint64}, {idx: 8, exp: ge, fn: ge_32766_uint64}, {idx: 8, exp: eq, fn: eq_32766_uint64}, {idx: 8, exp: ne, fn: ne_32766_uint64}, {idx: 9, exp: lt, fn: lt_32767_uint64}, {idx: 9, exp: le, fn: le_32767_uint64}, {idx: 9, exp: gt, fn: gt_32767_uint64}, {idx: 9, exp: ge, fn: ge_32767_uint64}, {idx: 9, exp: eq, fn: eq_32767_uint64}, {idx: 9, exp: ne, fn: ne_32767_uint64}, {idx: 10, exp: lt, fn: lt_32768_uint64}, {idx: 10, exp: le, fn: le_32768_uint64}, {idx: 10, exp: gt, fn: gt_32768_uint64}, {idx: 10, exp: ge, fn: ge_32768_uint64}, {idx: 10, exp: eq, fn: eq_32768_uint64}, {idx: 10, exp: ne, fn: ne_32768_uint64}, {idx: 11, exp: lt, fn: lt_65534_uint64}, {idx: 11, exp: le, fn: le_65534_uint64}, {idx: 11, exp: gt, fn: gt_65534_uint64}, {idx: 11, exp: ge, fn: ge_65534_uint64}, {idx: 11, exp: eq, fn: eq_65534_uint64}, {idx: 11, exp: ne, fn: ne_65534_uint64}, {idx: 12, exp: lt, fn: lt_65535_uint64}, {idx: 12, exp: le, fn: le_65535_uint64}, {idx: 12, exp: gt, fn: gt_65535_uint64}, {idx: 12, exp: ge, fn: ge_65535_uint64}, {idx: 12, exp: eq, fn: eq_65535_uint64}, {idx: 12, exp: ne, fn: ne_65535_uint64}, {idx: 13, exp: lt, fn: lt_65536_uint64}, {idx: 13, exp: le, fn: le_65536_uint64}, {idx: 13, exp: gt, fn: gt_65536_uint64}, {idx: 13, exp: ge, fn: ge_65536_uint64}, {idx: 13, exp: eq, fn: eq_65536_uint64}, {idx: 13, exp: ne, fn: ne_65536_uint64}, {idx: 14, exp: lt, fn: lt_2147483646_uint64}, {idx: 14, exp: le, fn: le_2147483646_uint64}, {idx: 14, exp: gt, fn: gt_2147483646_uint64}, {idx: 14, exp: ge, fn: ge_2147483646_uint64}, {idx: 14, exp: eq, fn: eq_2147483646_uint64}, {idx: 14, exp: ne, fn: ne_2147483646_uint64}, {idx: 15, exp: lt, fn: lt_2147483647_uint64}, {idx: 15, exp: le, fn: le_2147483647_uint64}, {idx: 15, exp: gt, fn: gt_2147483647_uint64}, {idx: 15, exp: ge, fn: ge_2147483647_uint64}, {idx: 15, exp: eq, fn: eq_2147483647_uint64}, {idx: 15, exp: ne, fn: ne_2147483647_uint64}, {idx: 16, exp: lt, fn: lt_2147483648_uint64}, {idx: 16, exp: le, fn: le_2147483648_uint64}, {idx: 16, exp: gt, fn: gt_2147483648_uint64}, {idx: 16, exp: ge, fn: ge_2147483648_uint64}, {idx: 16, exp: eq, fn: eq_2147483648_uint64}, {idx: 16, exp: ne, fn: ne_2147483648_uint64}, {idx: 17, exp: lt, fn: lt_4278190080_uint64}, {idx: 17, exp: le, fn: le_4278190080_uint64}, {idx: 17, exp: gt, fn: gt_4278190080_uint64}, {idx: 17, exp: ge, fn: ge_4278190080_uint64}, {idx: 17, exp: eq, fn: eq_4278190080_uint64}, {idx: 17, exp: ne, fn: ne_4278190080_uint64}, {idx: 18, exp: lt, fn: lt_4294967294_uint64}, {idx: 18, exp: le, fn: le_4294967294_uint64}, {idx: 18, exp: gt, fn: gt_4294967294_uint64}, {idx: 18, exp: ge, fn: ge_4294967294_uint64}, {idx: 18, exp: eq, fn: eq_4294967294_uint64}, {idx: 18, exp: ne, fn: ne_4294967294_uint64}, {idx: 19, exp: lt, fn: lt_4294967295_uint64}, {idx: 19, exp: le, fn: le_4294967295_uint64}, {idx: 19, exp: gt, fn: gt_4294967295_uint64}, {idx: 19, exp: ge, fn: ge_4294967295_uint64}, {idx: 19, exp: eq, fn: eq_4294967295_uint64}, {idx: 19, exp: ne, fn: ne_4294967295_uint64}, {idx: 20, exp: lt, fn: lt_4294967296_uint64}, {idx: 20, exp: le, fn: le_4294967296_uint64}, {idx: 20, exp: gt, fn: gt_4294967296_uint64}, {idx: 20, exp: ge, fn: ge_4294967296_uint64}, {idx: 20, exp: eq, fn: eq_4294967296_uint64}, {idx: 20, exp: ne, fn: ne_4294967296_uint64}, {idx: 21, exp: lt, fn: lt_1095216660480_uint64}, {idx: 21, exp: le, fn: le_1095216660480_uint64}, {idx: 21, exp: gt, fn: gt_1095216660480_uint64}, {idx: 21, exp: ge, fn: ge_1095216660480_uint64}, {idx: 21, exp: eq, fn: eq_1095216660480_uint64}, {idx: 21, exp: ne, fn: ne_1095216660480_uint64}, {idx: 22, exp: lt, fn: lt_9223372036854775806_uint64}, {idx: 22, exp: le, fn: le_9223372036854775806_uint64}, {idx: 22, exp: gt, fn: gt_9223372036854775806_uint64}, {idx: 22, exp: ge, fn: ge_9223372036854775806_uint64}, {idx: 22, exp: eq, fn: eq_9223372036854775806_uint64}, {idx: 22, exp: ne, fn: ne_9223372036854775806_uint64}, {idx: 23, exp: lt, fn: lt_9223372036854775807_uint64}, {idx: 23, exp: le, fn: le_9223372036854775807_uint64}, {idx: 23, exp: gt, fn: gt_9223372036854775807_uint64}, {idx: 23, exp: ge, fn: ge_9223372036854775807_uint64}, {idx: 23, exp: eq, fn: eq_9223372036854775807_uint64}, {idx: 23, exp: ne, fn: ne_9223372036854775807_uint64}, {idx: 24, exp: lt, fn: lt_9223372036854775808_uint64}, {idx: 24, exp: le, fn: le_9223372036854775808_uint64}, {idx: 24, exp: gt, fn: gt_9223372036854775808_uint64}, {idx: 24, exp: ge, fn: ge_9223372036854775808_uint64}, {idx: 24, exp: eq, fn: eq_9223372036854775808_uint64}, {idx: 24, exp: ne, fn: ne_9223372036854775808_uint64}, {idx: 25, exp: lt, fn: lt_18374686479671623680_uint64}, {idx: 25, exp: le, fn: le_18374686479671623680_uint64}, {idx: 25, exp: gt, fn: gt_18374686479671623680_uint64}, {idx: 25, exp: ge, fn: ge_18374686479671623680_uint64}, {idx: 25, exp: eq, fn: eq_18374686479671623680_uint64}, {idx: 25, exp: ne, fn: ne_18374686479671623680_uint64}, {idx: 26, exp: lt, fn: lt_18446744073709551614_uint64}, {idx: 26, exp: le, fn: le_18446744073709551614_uint64}, {idx: 26, exp: gt, fn: gt_18446744073709551614_uint64}, {idx: 26, exp: ge, fn: ge_18446744073709551614_uint64}, {idx: 26, exp: eq, fn: eq_18446744073709551614_uint64}, {idx: 26, exp: ne, fn: ne_18446744073709551614_uint64}, {idx: 27, exp: lt, fn: lt_18446744073709551615_uint64}, {idx: 27, exp: le, fn: le_18446744073709551615_uint64}, {idx: 27, exp: gt, fn: gt_18446744073709551615_uint64}, {idx: 27, exp: ge, fn: ge_18446744073709551615_uint64}, {idx: 27, exp: eq, fn: eq_18446744073709551615_uint64}, {idx: 27, exp: ne, fn: ne_18446744073709551615_uint64}, } // uint32 tests var uint32_vals = []uint32{ 0, 1, 126, 127, 128, 254, 255, 256, 32766, 32767, 32768, 65534, 65535, 65536, 2147483646, 2147483647, 2147483648, 4278190080, 4294967294, 4294967295, } func lt_0_uint32(x uint32) bool { return x < 0 } func le_0_uint32(x uint32) bool { return x <= 0 } func gt_0_uint32(x uint32) bool { return x > 0 } func ge_0_uint32(x uint32) bool { return x >= 0 } func eq_0_uint32(x uint32) bool { return x == 0 } func ne_0_uint32(x uint32) bool { return x != 0 } func lt_1_uint32(x uint32) bool { return x < 1 } func le_1_uint32(x uint32) bool { return x <= 1 } func gt_1_uint32(x uint32) bool { return x > 1 } func ge_1_uint32(x uint32) bool { return x >= 1 } func eq_1_uint32(x uint32) bool { return x == 1 } func ne_1_uint32(x uint32) bool { return x != 1 } func lt_126_uint32(x uint32) bool { return x < 126 } func le_126_uint32(x uint32) bool { return x <= 126 } func gt_126_uint32(x uint32) bool { return x > 126 } func ge_126_uint32(x uint32) bool { return x >= 126 } func eq_126_uint32(x uint32) bool { return x == 126 } func ne_126_uint32(x uint32) bool { return x != 126 } func lt_127_uint32(x uint32) bool { return x < 127 } func le_127_uint32(x uint32) bool { return x <= 127 } func gt_127_uint32(x uint32) bool { return x > 127 } func ge_127_uint32(x uint32) bool { return x >= 127 } func eq_127_uint32(x uint32) bool { return x == 127 } func ne_127_uint32(x uint32) bool { return x != 127 } func lt_128_uint32(x uint32) bool { return x < 128 } func le_128_uint32(x uint32) bool { return x <= 128 } func gt_128_uint32(x uint32) bool { return x > 128 } func ge_128_uint32(x uint32) bool { return x >= 128 } func eq_128_uint32(x uint32) bool { return x == 128 } func ne_128_uint32(x uint32) bool { return x != 128 } func lt_254_uint32(x uint32) bool { return x < 254 } func le_254_uint32(x uint32) bool { return x <= 254 } func gt_254_uint32(x uint32) bool { return x > 254 } func ge_254_uint32(x uint32) bool { return x >= 254 } func eq_254_uint32(x uint32) bool { return x == 254 } func ne_254_uint32(x uint32) bool { return x != 254 } func lt_255_uint32(x uint32) bool { return x < 255 } func le_255_uint32(x uint32) bool { return x <= 255 } func gt_255_uint32(x uint32) bool { return x > 255 } func ge_255_uint32(x uint32) bool { return x >= 255 } func eq_255_uint32(x uint32) bool { return x == 255 } func ne_255_uint32(x uint32) bool { return x != 255 } func lt_256_uint32(x uint32) bool { return x < 256 } func le_256_uint32(x uint32) bool { return x <= 256 } func gt_256_uint32(x uint32) bool { return x > 256 } func ge_256_uint32(x uint32) bool { return x >= 256 } func eq_256_uint32(x uint32) bool { return x == 256 } func ne_256_uint32(x uint32) bool { return x != 256 } func lt_32766_uint32(x uint32) bool { return x < 32766 } func le_32766_uint32(x uint32) bool { return x <= 32766 } func gt_32766_uint32(x uint32) bool { return x > 32766 } func ge_32766_uint32(x uint32) bool { return x >= 32766 } func eq_32766_uint32(x uint32) bool { return x == 32766 } func ne_32766_uint32(x uint32) bool { return x != 32766 } func lt_32767_uint32(x uint32) bool { return x < 32767 } func le_32767_uint32(x uint32) bool { return x <= 32767 } func gt_32767_uint32(x uint32) bool { return x > 32767 } func ge_32767_uint32(x uint32) bool { return x >= 32767 } func eq_32767_uint32(x uint32) bool { return x == 32767 } func ne_32767_uint32(x uint32) bool { return x != 32767 } func lt_32768_uint32(x uint32) bool { return x < 32768 } func le_32768_uint32(x uint32) bool { return x <= 32768 } func gt_32768_uint32(x uint32) bool { return x > 32768 } func ge_32768_uint32(x uint32) bool { return x >= 32768 } func eq_32768_uint32(x uint32) bool { return x == 32768 } func ne_32768_uint32(x uint32) bool { return x != 32768 } func lt_65534_uint32(x uint32) bool { return x < 65534 } func le_65534_uint32(x uint32) bool { return x <= 65534 } func gt_65534_uint32(x uint32) bool { return x > 65534 } func ge_65534_uint32(x uint32) bool { return x >= 65534 } func eq_65534_uint32(x uint32) bool { return x == 65534 } func ne_65534_uint32(x uint32) bool { return x != 65534 } func lt_65535_uint32(x uint32) bool { return x < 65535 } func le_65535_uint32(x uint32) bool { return x <= 65535 } func gt_65535_uint32(x uint32) bool { return x > 65535 } func ge_65535_uint32(x uint32) bool { return x >= 65535 } func eq_65535_uint32(x uint32) bool { return x == 65535 } func ne_65535_uint32(x uint32) bool { return x != 65535 } func lt_65536_uint32(x uint32) bool { return x < 65536 } func le_65536_uint32(x uint32) bool { return x <= 65536 } func gt_65536_uint32(x uint32) bool { return x > 65536 } func ge_65536_uint32(x uint32) bool { return x >= 65536 } func eq_65536_uint32(x uint32) bool { return x == 65536 } func ne_65536_uint32(x uint32) bool { return x != 65536 } func lt_2147483646_uint32(x uint32) bool { return x < 2147483646 } func le_2147483646_uint32(x uint32) bool { return x <= 2147483646 } func gt_2147483646_uint32(x uint32) bool { return x > 2147483646 } func ge_2147483646_uint32(x uint32) bool { return x >= 2147483646 } func eq_2147483646_uint32(x uint32) bool { return x == 2147483646 } func ne_2147483646_uint32(x uint32) bool { return x != 2147483646 } func lt_2147483647_uint32(x uint32) bool { return x < 2147483647 } func le_2147483647_uint32(x uint32) bool { return x <= 2147483647 } func gt_2147483647_uint32(x uint32) bool { return x > 2147483647 } func ge_2147483647_uint32(x uint32) bool { return x >= 2147483647 } func eq_2147483647_uint32(x uint32) bool { return x == 2147483647 } func ne_2147483647_uint32(x uint32) bool { return x != 2147483647 } func lt_2147483648_uint32(x uint32) bool { return x < 2147483648 } func le_2147483648_uint32(x uint32) bool { return x <= 2147483648 } func gt_2147483648_uint32(x uint32) bool { return x > 2147483648 } func ge_2147483648_uint32(x uint32) bool { return x >= 2147483648 } func eq_2147483648_uint32(x uint32) bool { return x == 2147483648 } func ne_2147483648_uint32(x uint32) bool { return x != 2147483648 } func lt_4278190080_uint32(x uint32) bool { return x < 4278190080 } func le_4278190080_uint32(x uint32) bool { return x <= 4278190080 } func gt_4278190080_uint32(x uint32) bool { return x > 4278190080 } func ge_4278190080_uint32(x uint32) bool { return x >= 4278190080 } func eq_4278190080_uint32(x uint32) bool { return x == 4278190080 } func ne_4278190080_uint32(x uint32) bool { return x != 4278190080 } func lt_4294967294_uint32(x uint32) bool { return x < 4294967294 } func le_4294967294_uint32(x uint32) bool { return x <= 4294967294 } func gt_4294967294_uint32(x uint32) bool { return x > 4294967294 } func ge_4294967294_uint32(x uint32) bool { return x >= 4294967294 } func eq_4294967294_uint32(x uint32) bool { return x == 4294967294 } func ne_4294967294_uint32(x uint32) bool { return x != 4294967294 } func lt_4294967295_uint32(x uint32) bool { return x < 4294967295 } func le_4294967295_uint32(x uint32) bool { return x <= 4294967295 } func gt_4294967295_uint32(x uint32) bool { return x > 4294967295 } func ge_4294967295_uint32(x uint32) bool { return x >= 4294967295 } func eq_4294967295_uint32(x uint32) bool { return x == 4294967295 } func ne_4294967295_uint32(x uint32) bool { return x != 4294967295 } var uint32_tests = []struct { idx int // index of the constant used exp result // expected results fn func(uint32) bool }{ {idx: 0, exp: lt, fn: lt_0_uint32}, {idx: 0, exp: le, fn: le_0_uint32}, {idx: 0, exp: gt, fn: gt_0_uint32}, {idx: 0, exp: ge, fn: ge_0_uint32}, {idx: 0, exp: eq, fn: eq_0_uint32}, {idx: 0, exp: ne, fn: ne_0_uint32}, {idx: 1, exp: lt, fn: lt_1_uint32}, {idx: 1, exp: le, fn: le_1_uint32}, {idx: 1, exp: gt, fn: gt_1_uint32}, {idx: 1, exp: ge, fn: ge_1_uint32}, {idx: 1, exp: eq, fn: eq_1_uint32}, {idx: 1, exp: ne, fn: ne_1_uint32}, {idx: 2, exp: lt, fn: lt_126_uint32}, {idx: 2, exp: le, fn: le_126_uint32}, {idx: 2, exp: gt, fn: gt_126_uint32}, {idx: 2, exp: ge, fn: ge_126_uint32}, {idx: 2, exp: eq, fn: eq_126_uint32}, {idx: 2, exp: ne, fn: ne_126_uint32}, {idx: 3, exp: lt, fn: lt_127_uint32}, {idx: 3, exp: le, fn: le_127_uint32}, {idx: 3, exp: gt, fn: gt_127_uint32}, {idx: 3, exp: ge, fn: ge_127_uint32}, {idx: 3, exp: eq, fn: eq_127_uint32}, {idx: 3, exp: ne, fn: ne_127_uint32}, {idx: 4, exp: lt, fn: lt_128_uint32}, {idx: 4, exp: le, fn: le_128_uint32}, {idx: 4, exp: gt, fn: gt_128_uint32}, {idx: 4, exp: ge, fn: ge_128_uint32}, {idx: 4, exp: eq, fn: eq_128_uint32}, {idx: 4, exp: ne, fn: ne_128_uint32}, {idx: 5, exp: lt, fn: lt_254_uint32}, {idx: 5, exp: le, fn: le_254_uint32}, {idx: 5, exp: gt, fn: gt_254_uint32}, {idx: 5, exp: ge, fn: ge_254_uint32}, {idx: 5, exp: eq, fn: eq_254_uint32}, {idx: 5, exp: ne, fn: ne_254_uint32}, {idx: 6, exp: lt, fn: lt_255_uint32}, {idx: 6, exp: le, fn: le_255_uint32}, {idx: 6, exp: gt, fn: gt_255_uint32}, {idx: 6, exp: ge, fn: ge_255_uint32}, {idx: 6, exp: eq, fn: eq_255_uint32}, {idx: 6, exp: ne, fn: ne_255_uint32}, {idx: 7, exp: lt, fn: lt_256_uint32}, {idx: 7, exp: le, fn: le_256_uint32}, {idx: 7, exp: gt, fn: gt_256_uint32}, {idx: 7, exp: ge, fn: ge_256_uint32}, {idx: 7, exp: eq, fn: eq_256_uint32}, {idx: 7, exp: ne, fn: ne_256_uint32}, {idx: 8, exp: lt, fn: lt_32766_uint32}, {idx: 8, exp: le, fn: le_32766_uint32}, {idx: 8, exp: gt, fn: gt_32766_uint32}, {idx: 8, exp: ge, fn: ge_32766_uint32}, {idx: 8, exp: eq, fn: eq_32766_uint32}, {idx: 8, exp: ne, fn: ne_32766_uint32}, {idx: 9, exp: lt, fn: lt_32767_uint32}, {idx: 9, exp: le, fn: le_32767_uint32}, {idx: 9, exp: gt, fn: gt_32767_uint32}, {idx: 9, exp: ge, fn: ge_32767_uint32}, {idx: 9, exp: eq, fn: eq_32767_uint32}, {idx: 9, exp: ne, fn: ne_32767_uint32}, {idx: 10, exp: lt, fn: lt_32768_uint32}, {idx: 10, exp: le, fn: le_32768_uint32}, {idx: 10, exp: gt, fn: gt_32768_uint32}, {idx: 10, exp: ge, fn: ge_32768_uint32}, {idx: 10, exp: eq, fn: eq_32768_uint32}, {idx: 10, exp: ne, fn: ne_32768_uint32}, {idx: 11, exp: lt, fn: lt_65534_uint32}, {idx: 11, exp: le, fn: le_65534_uint32}, {idx: 11, exp: gt, fn: gt_65534_uint32}, {idx: 11, exp: ge, fn: ge_65534_uint32}, {idx: 11, exp: eq, fn: eq_65534_uint32}, {idx: 11, exp: ne, fn: ne_65534_uint32}, {idx: 12, exp: lt, fn: lt_65535_uint32}, {idx: 12, exp: le, fn: le_65535_uint32}, {idx: 12, exp: gt, fn: gt_65535_uint32}, {idx: 12, exp: ge, fn: ge_65535_uint32}, {idx: 12, exp: eq, fn: eq_65535_uint32}, {idx: 12, exp: ne, fn: ne_65535_uint32}, {idx: 13, exp: lt, fn: lt_65536_uint32}, {idx: 13, exp: le, fn: le_65536_uint32}, {idx: 13, exp: gt, fn: gt_65536_uint32}, {idx: 13, exp: ge, fn: ge_65536_uint32}, {idx: 13, exp: eq, fn: eq_65536_uint32}, {idx: 13, exp: ne, fn: ne_65536_uint32}, {idx: 14, exp: lt, fn: lt_2147483646_uint32}, {idx: 14, exp: le, fn: le_2147483646_uint32}, {idx: 14, exp: gt, fn: gt_2147483646_uint32}, {idx: 14, exp: ge, fn: ge_2147483646_uint32}, {idx: 14, exp: eq, fn: eq_2147483646_uint32}, {idx: 14, exp: ne, fn: ne_2147483646_uint32}, {idx: 15, exp: lt, fn: lt_2147483647_uint32}, {idx: 15, exp: le, fn: le_2147483647_uint32}, {idx: 15, exp: gt, fn: gt_2147483647_uint32}, {idx: 15, exp: ge, fn: ge_2147483647_uint32}, {idx: 15, exp: eq, fn: eq_2147483647_uint32}, {idx: 15, exp: ne, fn: ne_2147483647_uint32}, {idx: 16, exp: lt, fn: lt_2147483648_uint32}, {idx: 16, exp: le, fn: le_2147483648_uint32}, {idx: 16, exp: gt, fn: gt_2147483648_uint32}, {idx: 16, exp: ge, fn: ge_2147483648_uint32}, {idx: 16, exp: eq, fn: eq_2147483648_uint32}, {idx: 16, exp: ne, fn: ne_2147483648_uint32}, {idx: 17, exp: lt, fn: lt_4278190080_uint32}, {idx: 17, exp: le, fn: le_4278190080_uint32}, {idx: 17, exp: gt, fn: gt_4278190080_uint32}, {idx: 17, exp: ge, fn: ge_4278190080_uint32}, {idx: 17, exp: eq, fn: eq_4278190080_uint32}, {idx: 17, exp: ne, fn: ne_4278190080_uint32}, {idx: 18, exp: lt, fn: lt_4294967294_uint32}, {idx: 18, exp: le, fn: le_4294967294_uint32}, {idx: 18, exp: gt, fn: gt_4294967294_uint32}, {idx: 18, exp: ge, fn: ge_4294967294_uint32}, {idx: 18, exp: eq, fn: eq_4294967294_uint32}, {idx: 18, exp: ne, fn: ne_4294967294_uint32}, {idx: 19, exp: lt, fn: lt_4294967295_uint32}, {idx: 19, exp: le, fn: le_4294967295_uint32}, {idx: 19, exp: gt, fn: gt_4294967295_uint32}, {idx: 19, exp: ge, fn: ge_4294967295_uint32}, {idx: 19, exp: eq, fn: eq_4294967295_uint32}, {idx: 19, exp: ne, fn: ne_4294967295_uint32}, } // uint16 tests var uint16_vals = []uint16{ 0, 1, 126, 127, 128, 254, 255, 256, 32766, 32767, 32768, 65534, 65535, } func lt_0_uint16(x uint16) bool { return x < 0 } func le_0_uint16(x uint16) bool { return x <= 0 } func gt_0_uint16(x uint16) bool { return x > 0 } func ge_0_uint16(x uint16) bool { return x >= 0 } func eq_0_uint16(x uint16) bool { return x == 0 } func ne_0_uint16(x uint16) bool { return x != 0 } func lt_1_uint16(x uint16) bool { return x < 1 } func le_1_uint16(x uint16) bool { return x <= 1 } func gt_1_uint16(x uint16) bool { return x > 1 } func ge_1_uint16(x uint16) bool { return x >= 1 } func eq_1_uint16(x uint16) bool { return x == 1 } func ne_1_uint16(x uint16) bool { return x != 1 } func lt_126_uint16(x uint16) bool { return x < 126 } func le_126_uint16(x uint16) bool { return x <= 126 } func gt_126_uint16(x uint16) bool { return x > 126 } func ge_126_uint16(x uint16) bool { return x >= 126 } func eq_126_uint16(x uint16) bool { return x == 126 } func ne_126_uint16(x uint16) bool { return x != 126 } func lt_127_uint16(x uint16) bool { return x < 127 } func le_127_uint16(x uint16) bool { return x <= 127 } func gt_127_uint16(x uint16) bool { return x > 127 } func ge_127_uint16(x uint16) bool { return x >= 127 } func eq_127_uint16(x uint16) bool { return x == 127 } func ne_127_uint16(x uint16) bool { return x != 127 } func lt_128_uint16(x uint16) bool { return x < 128 } func le_128_uint16(x uint16) bool { return x <= 128 } func gt_128_uint16(x uint16) bool { return x > 128 } func ge_128_uint16(x uint16) bool { return x >= 128 } func eq_128_uint16(x uint16) bool { return x == 128 } func ne_128_uint16(x uint16) bool { return x != 128 } func lt_254_uint16(x uint16) bool { return x < 254 } func le_254_uint16(x uint16) bool { return x <= 254 } func gt_254_uint16(x uint16) bool { return x > 254 } func ge_254_uint16(x uint16) bool { return x >= 254 } func eq_254_uint16(x uint16) bool { return x == 254 } func ne_254_uint16(x uint16) bool { return x != 254 } func lt_255_uint16(x uint16) bool { return x < 255 } func le_255_uint16(x uint16) bool { return x <= 255 } func gt_255_uint16(x uint16) bool { return x > 255 } func ge_255_uint16(x uint16) bool { return x >= 255 } func eq_255_uint16(x uint16) bool { return x == 255 } func ne_255_uint16(x uint16) bool { return x != 255 } func lt_256_uint16(x uint16) bool { return x < 256 } func le_256_uint16(x uint16) bool { return x <= 256 } func gt_256_uint16(x uint16) bool { return x > 256 } func ge_256_uint16(x uint16) bool { return x >= 256 } func eq_256_uint16(x uint16) bool { return x == 256 } func ne_256_uint16(x uint16) bool { return x != 256 } func lt_32766_uint16(x uint16) bool { return x < 32766 } func le_32766_uint16(x uint16) bool { return x <= 32766 } func gt_32766_uint16(x uint16) bool { return x > 32766 } func ge_32766_uint16(x uint16) bool { return x >= 32766 } func eq_32766_uint16(x uint16) bool { return x == 32766 } func ne_32766_uint16(x uint16) bool { return x != 32766 } func lt_32767_uint16(x uint16) bool { return x < 32767 } func le_32767_uint16(x uint16) bool { return x <= 32767 } func gt_32767_uint16(x uint16) bool { return x > 32767 } func ge_32767_uint16(x uint16) bool { return x >= 32767 } func eq_32767_uint16(x uint16) bool { return x == 32767 } func ne_32767_uint16(x uint16) bool { return x != 32767 } func lt_32768_uint16(x uint16) bool { return x < 32768 } func le_32768_uint16(x uint16) bool { return x <= 32768 } func gt_32768_uint16(x uint16) bool { return x > 32768 } func ge_32768_uint16(x uint16) bool { return x >= 32768 } func eq_32768_uint16(x uint16) bool { return x == 32768 } func ne_32768_uint16(x uint16) bool { return x != 32768 } func lt_65534_uint16(x uint16) bool { return x < 65534 } func le_65534_uint16(x uint16) bool { return x <= 65534 } func gt_65534_uint16(x uint16) bool { return x > 65534 } func ge_65534_uint16(x uint16) bool { return x >= 65534 } func eq_65534_uint16(x uint16) bool { return x == 65534 } func ne_65534_uint16(x uint16) bool { return x != 65534 } func lt_65535_uint16(x uint16) bool { return x < 65535 } func le_65535_uint16(x uint16) bool { return x <= 65535 } func gt_65535_uint16(x uint16) bool { return x > 65535 } func ge_65535_uint16(x uint16) bool { return x >= 65535 } func eq_65535_uint16(x uint16) bool { return x == 65535 } func ne_65535_uint16(x uint16) bool { return x != 65535 } var uint16_tests = []struct { idx int // index of the constant used exp result // expected results fn func(uint16) bool }{ {idx: 0, exp: lt, fn: lt_0_uint16}, {idx: 0, exp: le, fn: le_0_uint16}, {idx: 0, exp: gt, fn: gt_0_uint16}, {idx: 0, exp: ge, fn: ge_0_uint16}, {idx: 0, exp: eq, fn: eq_0_uint16}, {idx: 0, exp: ne, fn: ne_0_uint16}, {idx: 1, exp: lt, fn: lt_1_uint16}, {idx: 1, exp: le, fn: le_1_uint16}, {idx: 1, exp: gt, fn: gt_1_uint16}, {idx: 1, exp: ge, fn: ge_1_uint16}, {idx: 1, exp: eq, fn: eq_1_uint16}, {idx: 1, exp: ne, fn: ne_1_uint16}, {idx: 2, exp: lt, fn: lt_126_uint16}, {idx: 2, exp: le, fn: le_126_uint16}, {idx: 2, exp: gt, fn: gt_126_uint16}, {idx: 2, exp: ge, fn: ge_126_uint16}, {idx: 2, exp: eq, fn: eq_126_uint16}, {idx: 2, exp: ne, fn: ne_126_uint16}, {idx: 3, exp: lt, fn: lt_127_uint16}, {idx: 3, exp: le, fn: le_127_uint16}, {idx: 3, exp: gt, fn: gt_127_uint16}, {idx: 3, exp: ge, fn: ge_127_uint16}, {idx: 3, exp: eq, fn: eq_127_uint16}, {idx: 3, exp: ne, fn: ne_127_uint16}, {idx: 4, exp: lt, fn: lt_128_uint16}, {idx: 4, exp: le, fn: le_128_uint16}, {idx: 4, exp: gt, fn: gt_128_uint16}, {idx: 4, exp: ge, fn: ge_128_uint16}, {idx: 4, exp: eq, fn: eq_128_uint16}, {idx: 4, exp: ne, fn: ne_128_uint16}, {idx: 5, exp: lt, fn: lt_254_uint16}, {idx: 5, exp: le, fn: le_254_uint16}, {idx: 5, exp: gt, fn: gt_254_uint16}, {idx: 5, exp: ge, fn: ge_254_uint16}, {idx: 5, exp: eq, fn: eq_254_uint16}, {idx: 5, exp: ne, fn: ne_254_uint16}, {idx: 6, exp: lt, fn: lt_255_uint16}, {idx: 6, exp: le, fn: le_255_uint16}, {idx: 6, exp: gt, fn: gt_255_uint16}, {idx: 6, exp: ge, fn: ge_255_uint16}, {idx: 6, exp: eq, fn: eq_255_uint16}, {idx: 6, exp: ne, fn: ne_255_uint16}, {idx: 7, exp: lt, fn: lt_256_uint16}, {idx: 7, exp: le, fn: le_256_uint16}, {idx: 7, exp: gt, fn: gt_256_uint16}, {idx: 7, exp: ge, fn: ge_256_uint16}, {idx: 7, exp: eq, fn: eq_256_uint16}, {idx: 7, exp: ne, fn: ne_256_uint16}, {idx: 8, exp: lt, fn: lt_32766_uint16}, {idx: 8, exp: le, fn: le_32766_uint16}, {idx: 8, exp: gt, fn: gt_32766_uint16}, {idx: 8, exp: ge, fn: ge_32766_uint16}, {idx: 8, exp: eq, fn: eq_32766_uint16}, {idx: 8, exp: ne, fn: ne_32766_uint16}, {idx: 9, exp: lt, fn: lt_32767_uint16}, {idx: 9, exp: le, fn: le_32767_uint16}, {idx: 9, exp: gt, fn: gt_32767_uint16}, {idx: 9, exp: ge, fn: ge_32767_uint16}, {idx: 9, exp: eq, fn: eq_32767_uint16}, {idx: 9, exp: ne, fn: ne_32767_uint16}, {idx: 10, exp: lt, fn: lt_32768_uint16}, {idx: 10, exp: le, fn: le_32768_uint16}, {idx: 10, exp: gt, fn: gt_32768_uint16}, {idx: 10, exp: ge, fn: ge_32768_uint16}, {idx: 10, exp: eq, fn: eq_32768_uint16}, {idx: 10, exp: ne, fn: ne_32768_uint16}, {idx: 11, exp: lt, fn: lt_65534_uint16}, {idx: 11, exp: le, fn: le_65534_uint16}, {idx: 11, exp: gt, fn: gt_65534_uint16}, {idx: 11, exp: ge, fn: ge_65534_uint16}, {idx: 11, exp: eq, fn: eq_65534_uint16}, {idx: 11, exp: ne, fn: ne_65534_uint16}, {idx: 12, exp: lt, fn: lt_65535_uint16}, {idx: 12, exp: le, fn: le_65535_uint16}, {idx: 12, exp: gt, fn: gt_65535_uint16}, {idx: 12, exp: ge, fn: ge_65535_uint16}, {idx: 12, exp: eq, fn: eq_65535_uint16}, {idx: 12, exp: ne, fn: ne_65535_uint16}, } // uint8 tests var uint8_vals = []uint8{ 0, 1, 126, 127, 128, 254, 255, } func lt_0_uint8(x uint8) bool { return x < 0 } func le_0_uint8(x uint8) bool { return x <= 0 } func gt_0_uint8(x uint8) bool { return x > 0 } func ge_0_uint8(x uint8) bool { return x >= 0 } func eq_0_uint8(x uint8) bool { return x == 0 } func ne_0_uint8(x uint8) bool { return x != 0 } func lt_1_uint8(x uint8) bool { return x < 1 } func le_1_uint8(x uint8) bool { return x <= 1 } func gt_1_uint8(x uint8) bool { return x > 1 } func ge_1_uint8(x uint8) bool { return x >= 1 } func eq_1_uint8(x uint8) bool { return x == 1 } func ne_1_uint8(x uint8) bool { return x != 1 } func lt_126_uint8(x uint8) bool { return x < 126 } func le_126_uint8(x uint8) bool { return x <= 126 } func gt_126_uint8(x uint8) bool { return x > 126 } func ge_126_uint8(x uint8) bool { return x >= 126 } func eq_126_uint8(x uint8) bool { return x == 126 } func ne_126_uint8(x uint8) bool { return x != 126 } func lt_127_uint8(x uint8) bool { return x < 127 } func le_127_uint8(x uint8) bool { return x <= 127 } func gt_127_uint8(x uint8) bool { return x > 127 } func ge_127_uint8(x uint8) bool { return x >= 127 } func eq_127_uint8(x uint8) bool { return x == 127 } func ne_127_uint8(x uint8) bool { return x != 127 } func lt_128_uint8(x uint8) bool { return x < 128 } func le_128_uint8(x uint8) bool { return x <= 128 } func gt_128_uint8(x uint8) bool { return x > 128 } func ge_128_uint8(x uint8) bool { return x >= 128 } func eq_128_uint8(x uint8) bool { return x == 128 } func ne_128_uint8(x uint8) bool { return x != 128 } func lt_254_uint8(x uint8) bool { return x < 254 } func le_254_uint8(x uint8) bool { return x <= 254 } func gt_254_uint8(x uint8) bool { return x > 254 } func ge_254_uint8(x uint8) bool { return x >= 254 } func eq_254_uint8(x uint8) bool { return x == 254 } func ne_254_uint8(x uint8) bool { return x != 254 } func lt_255_uint8(x uint8) bool { return x < 255 } func le_255_uint8(x uint8) bool { return x <= 255 } func gt_255_uint8(x uint8) bool { return x > 255 } func ge_255_uint8(x uint8) bool { return x >= 255 } func eq_255_uint8(x uint8) bool { return x == 255 } func ne_255_uint8(x uint8) bool { return x != 255 } var uint8_tests = []struct { idx int // index of the constant used exp result // expected results fn func(uint8) bool }{ {idx: 0, exp: lt, fn: lt_0_uint8}, {idx: 0, exp: le, fn: le_0_uint8}, {idx: 0, exp: gt, fn: gt_0_uint8}, {idx: 0, exp: ge, fn: ge_0_uint8}, {idx: 0, exp: eq, fn: eq_0_uint8}, {idx: 0, exp: ne, fn: ne_0_uint8}, {idx: 1, exp: lt, fn: lt_1_uint8}, {idx: 1, exp: le, fn: le_1_uint8}, {idx: 1, exp: gt, fn: gt_1_uint8}, {idx: 1, exp: ge, fn: ge_1_uint8}, {idx: 1, exp: eq, fn: eq_1_uint8}, {idx: 1, exp: ne, fn: ne_1_uint8}, {idx: 2, exp: lt, fn: lt_126_uint8}, {idx: 2, exp: le, fn: le_126_uint8}, {idx: 2, exp: gt, fn: gt_126_uint8}, {idx: 2, exp: ge, fn: ge_126_uint8}, {idx: 2, exp: eq, fn: eq_126_uint8}, {idx: 2, exp: ne, fn: ne_126_uint8}, {idx: 3, exp: lt, fn: lt_127_uint8}, {idx: 3, exp: le, fn: le_127_uint8}, {idx: 3, exp: gt, fn: gt_127_uint8}, {idx: 3, exp: ge, fn: ge_127_uint8}, {idx: 3, exp: eq, fn: eq_127_uint8}, {idx: 3, exp: ne, fn: ne_127_uint8}, {idx: 4, exp: lt, fn: lt_128_uint8}, {idx: 4, exp: le, fn: le_128_uint8}, {idx: 4, exp: gt, fn: gt_128_uint8}, {idx: 4, exp: ge, fn: ge_128_uint8}, {idx: 4, exp: eq, fn: eq_128_uint8}, {idx: 4, exp: ne, fn: ne_128_uint8}, {idx: 5, exp: lt, fn: lt_254_uint8}, {idx: 5, exp: le, fn: le_254_uint8}, {idx: 5, exp: gt, fn: gt_254_uint8}, {idx: 5, exp: ge, fn: ge_254_uint8}, {idx: 5, exp: eq, fn: eq_254_uint8}, {idx: 5, exp: ne, fn: ne_254_uint8}, {idx: 6, exp: lt, fn: lt_255_uint8}, {idx: 6, exp: le, fn: le_255_uint8}, {idx: 6, exp: gt, fn: gt_255_uint8}, {idx: 6, exp: ge, fn: ge_255_uint8}, {idx: 6, exp: eq, fn: eq_255_uint8}, {idx: 6, exp: ne, fn: ne_255_uint8}, } // int64 tests var int64_vals = []int64{ -9223372036854775808, -9223372036854775807, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 126, 127, 128, 254, 255, 256, 32766, 32767, 32768, 65534, 65535, 65536, 2147483646, 2147483647, 2147483648, 4278190080, 4294967294, 4294967295, 4294967296, 1095216660480, 9223372036854775806, 9223372036854775807, } func lt_neg9223372036854775808_int64(x int64) bool { return x < -9223372036854775808 } func le_neg9223372036854775808_int64(x int64) bool { return x <= -9223372036854775808 } func gt_neg9223372036854775808_int64(x int64) bool { return x > -9223372036854775808 } func ge_neg9223372036854775808_int64(x int64) bool { return x >= -9223372036854775808 } func eq_neg9223372036854775808_int64(x int64) bool { return x == -9223372036854775808 } func ne_neg9223372036854775808_int64(x int64) bool { return x != -9223372036854775808 } func lt_neg9223372036854775807_int64(x int64) bool { return x < -9223372036854775807 } func le_neg9223372036854775807_int64(x int64) bool { return x <= -9223372036854775807 } func gt_neg9223372036854775807_int64(x int64) bool { return x > -9223372036854775807 } func ge_neg9223372036854775807_int64(x int64) bool { return x >= -9223372036854775807 } func eq_neg9223372036854775807_int64(x int64) bool { return x == -9223372036854775807 } func ne_neg9223372036854775807_int64(x int64) bool { return x != -9223372036854775807 } func lt_neg2147483649_int64(x int64) bool { return x < -2147483649 } func le_neg2147483649_int64(x int64) bool { return x <= -2147483649 } func gt_neg2147483649_int64(x int64) bool { return x > -2147483649 } func ge_neg2147483649_int64(x int64) bool { return x >= -2147483649 } func eq_neg2147483649_int64(x int64) bool { return x == -2147483649 } func ne_neg2147483649_int64(x int64) bool { return x != -2147483649 } func lt_neg2147483648_int64(x int64) bool { return x < -2147483648 } func le_neg2147483648_int64(x int64) bool { return x <= -2147483648 } func gt_neg2147483648_int64(x int64) bool { return x > -2147483648 } func ge_neg2147483648_int64(x int64) bool { return x >= -2147483648 } func eq_neg2147483648_int64(x int64) bool { return x == -2147483648 } func ne_neg2147483648_int64(x int64) bool { return x != -2147483648 } func lt_neg2147483647_int64(x int64) bool { return x < -2147483647 } func le_neg2147483647_int64(x int64) bool { return x <= -2147483647 } func gt_neg2147483647_int64(x int64) bool { return x > -2147483647 } func ge_neg2147483647_int64(x int64) bool { return x >= -2147483647 } func eq_neg2147483647_int64(x int64) bool { return x == -2147483647 } func ne_neg2147483647_int64(x int64) bool { return x != -2147483647 } func lt_neg32769_int64(x int64) bool { return x < -32769 } func le_neg32769_int64(x int64) bool { return x <= -32769 } func gt_neg32769_int64(x int64) bool { return x > -32769 } func ge_neg32769_int64(x int64) bool { return x >= -32769 } func eq_neg32769_int64(x int64) bool { return x == -32769 } func ne_neg32769_int64(x int64) bool { return x != -32769 } func lt_neg32768_int64(x int64) bool { return x < -32768 } func le_neg32768_int64(x int64) bool { return x <= -32768 } func gt_neg32768_int64(x int64) bool { return x > -32768 } func ge_neg32768_int64(x int64) bool { return x >= -32768 } func eq_neg32768_int64(x int64) bool { return x == -32768 } func ne_neg32768_int64(x int64) bool { return x != -32768 } func lt_neg32767_int64(x int64) bool { return x < -32767 } func le_neg32767_int64(x int64) bool { return x <= -32767 } func gt_neg32767_int64(x int64) bool { return x > -32767 } func ge_neg32767_int64(x int64) bool { return x >= -32767 } func eq_neg32767_int64(x int64) bool { return x == -32767 } func ne_neg32767_int64(x int64) bool { return x != -32767 } func lt_neg129_int64(x int64) bool { return x < -129 } func le_neg129_int64(x int64) bool { return x <= -129 } func gt_neg129_int64(x int64) bool { return x > -129 } func ge_neg129_int64(x int64) bool { return x >= -129 } func eq_neg129_int64(x int64) bool { return x == -129 } func ne_neg129_int64(x int64) bool { return x != -129 } func lt_neg128_int64(x int64) bool { return x < -128 } func le_neg128_int64(x int64) bool { return x <= -128 } func gt_neg128_int64(x int64) bool { return x > -128 } func ge_neg128_int64(x int64) bool { return x >= -128 } func eq_neg128_int64(x int64) bool { return x == -128 } func ne_neg128_int64(x int64) bool { return x != -128 } func lt_neg127_int64(x int64) bool { return x < -127 } func le_neg127_int64(x int64) bool { return x <= -127 } func gt_neg127_int64(x int64) bool { return x > -127 } func ge_neg127_int64(x int64) bool { return x >= -127 } func eq_neg127_int64(x int64) bool { return x == -127 } func ne_neg127_int64(x int64) bool { return x != -127 } func lt_neg1_int64(x int64) bool { return x < -1 } func le_neg1_int64(x int64) bool { return x <= -1 } func gt_neg1_int64(x int64) bool { return x > -1 } func ge_neg1_int64(x int64) bool { return x >= -1 } func eq_neg1_int64(x int64) bool { return x == -1 } func ne_neg1_int64(x int64) bool { return x != -1 } func lt_0_int64(x int64) bool { return x < 0 } func le_0_int64(x int64) bool { return x <= 0 } func gt_0_int64(x int64) bool { return x > 0 } func ge_0_int64(x int64) bool { return x >= 0 } func eq_0_int64(x int64) bool { return x == 0 } func ne_0_int64(x int64) bool { return x != 0 } func lt_1_int64(x int64) bool { return x < 1 } func le_1_int64(x int64) bool { return x <= 1 } func gt_1_int64(x int64) bool { return x > 1 } func ge_1_int64(x int64) bool { return x >= 1 } func eq_1_int64(x int64) bool { return x == 1 } func ne_1_int64(x int64) bool { return x != 1 } func lt_126_int64(x int64) bool { return x < 126 } func le_126_int64(x int64) bool { return x <= 126 } func gt_126_int64(x int64) bool { return x > 126 } func ge_126_int64(x int64) bool { return x >= 126 } func eq_126_int64(x int64) bool { return x == 126 } func ne_126_int64(x int64) bool { return x != 126 } func lt_127_int64(x int64) bool { return x < 127 } func le_127_int64(x int64) bool { return x <= 127 } func gt_127_int64(x int64) bool { return x > 127 } func ge_127_int64(x int64) bool { return x >= 127 } func eq_127_int64(x int64) bool { return x == 127 } func ne_127_int64(x int64) bool { return x != 127 } func lt_128_int64(x int64) bool { return x < 128 } func le_128_int64(x int64) bool { return x <= 128 } func gt_128_int64(x int64) bool { return x > 128 } func ge_128_int64(x int64) bool { return x >= 128 } func eq_128_int64(x int64) bool { return x == 128 } func ne_128_int64(x int64) bool { return x != 128 } func lt_254_int64(x int64) bool { return x < 254 } func le_254_int64(x int64) bool { return x <= 254 } func gt_254_int64(x int64) bool { return x > 254 } func ge_254_int64(x int64) bool { return x >= 254 } func eq_254_int64(x int64) bool { return x == 254 } func ne_254_int64(x int64) bool { return x != 254 } func lt_255_int64(x int64) bool { return x < 255 } func le_255_int64(x int64) bool { return x <= 255 } func gt_255_int64(x int64) bool { return x > 255 } func ge_255_int64(x int64) bool { return x >= 255 } func eq_255_int64(x int64) bool { return x == 255 } func ne_255_int64(x int64) bool { return x != 255 } func lt_256_int64(x int64) bool { return x < 256 } func le_256_int64(x int64) bool { return x <= 256 } func gt_256_int64(x int64) bool { return x > 256 } func ge_256_int64(x int64) bool { return x >= 256 } func eq_256_int64(x int64) bool { return x == 256 } func ne_256_int64(x int64) bool { return x != 256 } func lt_32766_int64(x int64) bool { return x < 32766 } func le_32766_int64(x int64) bool { return x <= 32766 } func gt_32766_int64(x int64) bool { return x > 32766 } func ge_32766_int64(x int64) bool { return x >= 32766 } func eq_32766_int64(x int64) bool { return x == 32766 } func ne_32766_int64(x int64) bool { return x != 32766 } func lt_32767_int64(x int64) bool { return x < 32767 } func le_32767_int64(x int64) bool { return x <= 32767 } func gt_32767_int64(x int64) bool { return x > 32767 } func ge_32767_int64(x int64) bool { return x >= 32767 } func eq_32767_int64(x int64) bool { return x == 32767 } func ne_32767_int64(x int64) bool { return x != 32767 } func lt_32768_int64(x int64) bool { return x < 32768 } func le_32768_int64(x int64) bool { return x <= 32768 } func gt_32768_int64(x int64) bool { return x > 32768 } func ge_32768_int64(x int64) bool { return x >= 32768 } func eq_32768_int64(x int64) bool { return x == 32768 } func ne_32768_int64(x int64) bool { return x != 32768 } func lt_65534_int64(x int64) bool { return x < 65534 } func le_65534_int64(x int64) bool { return x <= 65534 } func gt_65534_int64(x int64) bool { return x > 65534 } func ge_65534_int64(x int64) bool { return x >= 65534 } func eq_65534_int64(x int64) bool { return x == 65534 } func ne_65534_int64(x int64) bool { return x != 65534 } func lt_65535_int64(x int64) bool { return x < 65535 } func le_65535_int64(x int64) bool { return x <= 65535 } func gt_65535_int64(x int64) bool { return x > 65535 } func ge_65535_int64(x int64) bool { return x >= 65535 } func eq_65535_int64(x int64) bool { return x == 65535 } func ne_65535_int64(x int64) bool { return x != 65535 } func lt_65536_int64(x int64) bool { return x < 65536 } func le_65536_int64(x int64) bool { return x <= 65536 } func gt_65536_int64(x int64) bool { return x > 65536 } func ge_65536_int64(x int64) bool { return x >= 65536 } func eq_65536_int64(x int64) bool { return x == 65536 } func ne_65536_int64(x int64) bool { return x != 65536 } func lt_2147483646_int64(x int64) bool { return x < 2147483646 } func le_2147483646_int64(x int64) bool { return x <= 2147483646 } func gt_2147483646_int64(x int64) bool { return x > 2147483646 } func ge_2147483646_int64(x int64) bool { return x >= 2147483646 } func eq_2147483646_int64(x int64) bool { return x == 2147483646 } func ne_2147483646_int64(x int64) bool { return x != 2147483646 } func lt_2147483647_int64(x int64) bool { return x < 2147483647 } func le_2147483647_int64(x int64) bool { return x <= 2147483647 } func gt_2147483647_int64(x int64) bool { return x > 2147483647 } func ge_2147483647_int64(x int64) bool { return x >= 2147483647 } func eq_2147483647_int64(x int64) bool { return x == 2147483647 } func ne_2147483647_int64(x int64) bool { return x != 2147483647 } func lt_2147483648_int64(x int64) bool { return x < 2147483648 } func le_2147483648_int64(x int64) bool { return x <= 2147483648 } func gt_2147483648_int64(x int64) bool { return x > 2147483648 } func ge_2147483648_int64(x int64) bool { return x >= 2147483648 } func eq_2147483648_int64(x int64) bool { return x == 2147483648 } func ne_2147483648_int64(x int64) bool { return x != 2147483648 } func lt_4278190080_int64(x int64) bool { return x < 4278190080 } func le_4278190080_int64(x int64) bool { return x <= 4278190080 } func gt_4278190080_int64(x int64) bool { return x > 4278190080 } func ge_4278190080_int64(x int64) bool { return x >= 4278190080 } func eq_4278190080_int64(x int64) bool { return x == 4278190080 } func ne_4278190080_int64(x int64) bool { return x != 4278190080 } func lt_4294967294_int64(x int64) bool { return x < 4294967294 } func le_4294967294_int64(x int64) bool { return x <= 4294967294 } func gt_4294967294_int64(x int64) bool { return x > 4294967294 } func ge_4294967294_int64(x int64) bool { return x >= 4294967294 } func eq_4294967294_int64(x int64) bool { return x == 4294967294 } func ne_4294967294_int64(x int64) bool { return x != 4294967294 } func lt_4294967295_int64(x int64) bool { return x < 4294967295 } func le_4294967295_int64(x int64) bool { return x <= 4294967295 } func gt_4294967295_int64(x int64) bool { return x > 4294967295 } func ge_4294967295_int64(x int64) bool { return x >= 4294967295 } func eq_4294967295_int64(x int64) bool { return x == 4294967295 } func ne_4294967295_int64(x int64) bool { return x != 4294967295 } func lt_4294967296_int64(x int64) bool { return x < 4294967296 } func le_4294967296_int64(x int64) bool { return x <= 4294967296 } func gt_4294967296_int64(x int64) bool { return x > 4294967296 } func ge_4294967296_int64(x int64) bool { return x >= 4294967296 } func eq_4294967296_int64(x int64) bool { return x == 4294967296 } func ne_4294967296_int64(x int64) bool { return x != 4294967296 } func lt_1095216660480_int64(x int64) bool { return x < 1095216660480 } func le_1095216660480_int64(x int64) bool { return x <= 1095216660480 } func gt_1095216660480_int64(x int64) bool { return x > 1095216660480 } func ge_1095216660480_int64(x int64) bool { return x >= 1095216660480 } func eq_1095216660480_int64(x int64) bool { return x == 1095216660480 } func ne_1095216660480_int64(x int64) bool { return x != 1095216660480 } func lt_9223372036854775806_int64(x int64) bool { return x < 9223372036854775806 } func le_9223372036854775806_int64(x int64) bool { return x <= 9223372036854775806 } func gt_9223372036854775806_int64(x int64) bool { return x > 9223372036854775806 } func ge_9223372036854775806_int64(x int64) bool { return x >= 9223372036854775806 } func eq_9223372036854775806_int64(x int64) bool { return x == 9223372036854775806 } func ne_9223372036854775806_int64(x int64) bool { return x != 9223372036854775806 } func lt_9223372036854775807_int64(x int64) bool { return x < 9223372036854775807 } func le_9223372036854775807_int64(x int64) bool { return x <= 9223372036854775807 } func gt_9223372036854775807_int64(x int64) bool { return x > 9223372036854775807 } func ge_9223372036854775807_int64(x int64) bool { return x >= 9223372036854775807 } func eq_9223372036854775807_int64(x int64) bool { return x == 9223372036854775807 } func ne_9223372036854775807_int64(x int64) bool { return x != 9223372036854775807 } var int64_tests = []struct { idx int // index of the constant used exp result // expected results fn func(int64) bool }{ {idx: 0, exp: lt, fn: lt_neg9223372036854775808_int64}, {idx: 0, exp: le, fn: le_neg9223372036854775808_int64}, {idx: 0, exp: gt, fn: gt_neg9223372036854775808_int64}, {idx: 0, exp: ge, fn: ge_neg9223372036854775808_int64}, {idx: 0, exp: eq, fn: eq_neg9223372036854775808_int64}, {idx: 0, exp: ne, fn: ne_neg9223372036854775808_int64}, {idx: 1, exp: lt, fn: lt_neg9223372036854775807_int64}, {idx: 1, exp: le, fn: le_neg9223372036854775807_int64}, {idx: 1, exp: gt, fn: gt_neg9223372036854775807_int64}, {idx: 1, exp: ge, fn: ge_neg9223372036854775807_int64}, {idx: 1, exp: eq, fn: eq_neg9223372036854775807_int64}, {idx: 1, exp: ne, fn: ne_neg9223372036854775807_int64}, {idx: 2, exp: lt, fn: lt_neg2147483649_int64}, {idx: 2, exp: le, fn: le_neg2147483649_int64}, {idx: 2, exp: gt, fn: gt_neg2147483649_int64}, {idx: 2, exp: ge, fn: ge_neg2147483649_int64}, {idx: 2, exp: eq, fn: eq_neg2147483649_int64}, {idx: 2, exp: ne, fn: ne_neg2147483649_int64}, {idx: 3, exp: lt, fn: lt_neg2147483648_int64}, {idx: 3, exp: le, fn: le_neg2147483648_int64}, {idx: 3, exp: gt, fn: gt_neg2147483648_int64}, {idx: 3, exp: ge, fn: ge_neg2147483648_int64}, {idx: 3, exp: eq, fn: eq_neg2147483648_int64}, {idx: 3, exp: ne, fn: ne_neg2147483648_int64}, {idx: 4, exp: lt, fn: lt_neg2147483647_int64}, {idx: 4, exp: le, fn: le_neg2147483647_int64}, {idx: 4, exp: gt, fn: gt_neg2147483647_int64}, {idx: 4, exp: ge, fn: ge_neg2147483647_int64}, {idx: 4, exp: eq, fn: eq_neg2147483647_int64}, {idx: 4, exp: ne, fn: ne_neg2147483647_int64}, {idx: 5, exp: lt, fn: lt_neg32769_int64}, {idx: 5, exp: le, fn: le_neg32769_int64}, {idx: 5, exp: gt, fn: gt_neg32769_int64}, {idx: 5, exp: ge, fn: ge_neg32769_int64}, {idx: 5, exp: eq, fn: eq_neg32769_int64}, {idx: 5, exp: ne, fn: ne_neg32769_int64}, {idx: 6, exp: lt, fn: lt_neg32768_int64}, {idx: 6, exp: le, fn: le_neg32768_int64}, {idx: 6, exp: gt, fn: gt_neg32768_int64}, {idx: 6, exp: ge, fn: ge_neg32768_int64}, {idx: 6, exp: eq, fn: eq_neg32768_int64}, {idx: 6, exp: ne, fn: ne_neg32768_int64}, {idx: 7, exp: lt, fn: lt_neg32767_int64}, {idx: 7, exp: le, fn: le_neg32767_int64}, {idx: 7, exp: gt, fn: gt_neg32767_int64}, {idx: 7, exp: ge, fn: ge_neg32767_int64}, {idx: 7, exp: eq, fn: eq_neg32767_int64}, {idx: 7, exp: ne, fn: ne_neg32767_int64}, {idx: 8, exp: lt, fn: lt_neg129_int64}, {idx: 8, exp: le, fn: le_neg129_int64}, {idx: 8, exp: gt, fn: gt_neg129_int64}, {idx: 8, exp: ge, fn: ge_neg129_int64}, {idx: 8, exp: eq, fn: eq_neg129_int64}, {idx: 8, exp: ne, fn: ne_neg129_int64}, {idx: 9, exp: lt, fn: lt_neg128_int64}, {idx: 9, exp: le, fn: le_neg128_int64}, {idx: 9, exp: gt, fn: gt_neg128_int64}, {idx: 9, exp: ge, fn: ge_neg128_int64}, {idx: 9, exp: eq, fn: eq_neg128_int64}, {idx: 9, exp: ne, fn: ne_neg128_int64}, {idx: 10, exp: lt, fn: lt_neg127_int64}, {idx: 10, exp: le, fn: le_neg127_int64}, {idx: 10, exp: gt, fn: gt_neg127_int64}, {idx: 10, exp: ge, fn: ge_neg127_int64}, {idx: 10, exp: eq, fn: eq_neg127_int64}, {idx: 10, exp: ne, fn: ne_neg127_int64}, {idx: 11, exp: lt, fn: lt_neg1_int64}, {idx: 11, exp: le, fn: le_neg1_int64}, {idx: 11, exp: gt, fn: gt_neg1_int64}, {idx: 11, exp: ge, fn: ge_neg1_int64}, {idx: 11, exp: eq, fn: eq_neg1_int64}, {idx: 11, exp: ne, fn: ne_neg1_int64}, {idx: 12, exp: lt, fn: lt_0_int64}, {idx: 12, exp: le, fn: le_0_int64}, {idx: 12, exp: gt, fn: gt_0_int64}, {idx: 12, exp: ge, fn: ge_0_int64}, {idx: 12, exp: eq, fn: eq_0_int64}, {idx: 12, exp: ne, fn: ne_0_int64}, {idx: 13, exp: lt, fn: lt_1_int64}, {idx: 13, exp: le, fn: le_1_int64}, {idx: 13, exp: gt, fn: gt_1_int64}, {idx: 13, exp: ge, fn: ge_1_int64}, {idx: 13, exp: eq, fn: eq_1_int64}, {idx: 13, exp: ne, fn: ne_1_int64}, {idx: 14, exp: lt, fn: lt_126_int64}, {idx: 14, exp: le, fn: le_126_int64}, {idx: 14, exp: gt, fn: gt_126_int64}, {idx: 14, exp: ge, fn: ge_126_int64}, {idx: 14, exp: eq, fn: eq_126_int64}, {idx: 14, exp: ne, fn: ne_126_int64}, {idx: 15, exp: lt, fn: lt_127_int64}, {idx: 15, exp: le, fn: le_127_int64}, {idx: 15, exp: gt, fn: gt_127_int64}, {idx: 15, exp: ge, fn: ge_127_int64}, {idx: 15, exp: eq, fn: eq_127_int64}, {idx: 15, exp: ne, fn: ne_127_int64}, {idx: 16, exp: lt, fn: lt_128_int64}, {idx: 16, exp: le, fn: le_128_int64}, {idx: 16, exp: gt, fn: gt_128_int64}, {idx: 16, exp: ge, fn: ge_128_int64}, {idx: 16, exp: eq, fn: eq_128_int64}, {idx: 16, exp: ne, fn: ne_128_int64}, {idx: 17, exp: lt, fn: lt_254_int64}, {idx: 17, exp: le, fn: le_254_int64}, {idx: 17, exp: gt, fn: gt_254_int64}, {idx: 17, exp: ge, fn: ge_254_int64}, {idx: 17, exp: eq, fn: eq_254_int64}, {idx: 17, exp: ne, fn: ne_254_int64}, {idx: 18, exp: lt, fn: lt_255_int64}, {idx: 18, exp: le, fn: le_255_int64}, {idx: 18, exp: gt, fn: gt_255_int64}, {idx: 18, exp: ge, fn: ge_255_int64}, {idx: 18, exp: eq, fn: eq_255_int64}, {idx: 18, exp: ne, fn: ne_255_int64}, {idx: 19, exp: lt, fn: lt_256_int64}, {idx: 19, exp: le, fn: le_256_int64}, {idx: 19, exp: gt, fn: gt_256_int64}, {idx: 19, exp: ge, fn: ge_256_int64}, {idx: 19, exp: eq, fn: eq_256_int64}, {idx: 19, exp: ne, fn: ne_256_int64}, {idx: 20, exp: lt, fn: lt_32766_int64}, {idx: 20, exp: le, fn: le_32766_int64}, {idx: 20, exp: gt, fn: gt_32766_int64}, {idx: 20, exp: ge, fn: ge_32766_int64}, {idx: 20, exp: eq, fn: eq_32766_int64}, {idx: 20, exp: ne, fn: ne_32766_int64}, {idx: 21, exp: lt, fn: lt_32767_int64}, {idx: 21, exp: le, fn: le_32767_int64}, {idx: 21, exp: gt, fn: gt_32767_int64}, {idx: 21, exp: ge, fn: ge_32767_int64}, {idx: 21, exp: eq, fn: eq_32767_int64}, {idx: 21, exp: ne, fn: ne_32767_int64}, {idx: 22, exp: lt, fn: lt_32768_int64}, {idx: 22, exp: le, fn: le_32768_int64}, {idx: 22, exp: gt, fn: gt_32768_int64}, {idx: 22, exp: ge, fn: ge_32768_int64}, {idx: 22, exp: eq, fn: eq_32768_int64}, {idx: 22, exp: ne, fn: ne_32768_int64}, {idx: 23, exp: lt, fn: lt_65534_int64}, {idx: 23, exp: le, fn: le_65534_int64}, {idx: 23, exp: gt, fn: gt_65534_int64}, {idx: 23, exp: ge, fn: ge_65534_int64}, {idx: 23, exp: eq, fn: eq_65534_int64}, {idx: 23, exp: ne, fn: ne_65534_int64}, {idx: 24, exp: lt, fn: lt_65535_int64}, {idx: 24, exp: le, fn: le_65535_int64}, {idx: 24, exp: gt, fn: gt_65535_int64}, {idx: 24, exp: ge, fn: ge_65535_int64}, {idx: 24, exp: eq, fn: eq_65535_int64}, {idx: 24, exp: ne, fn: ne_65535_int64}, {idx: 25, exp: lt, fn: lt_65536_int64}, {idx: 25, exp: le, fn: le_65536_int64}, {idx: 25, exp: gt, fn: gt_65536_int64}, {idx: 25, exp: ge, fn: ge_65536_int64}, {idx: 25, exp: eq, fn: eq_65536_int64}, {idx: 25, exp: ne, fn: ne_65536_int64}, {idx: 26, exp: lt, fn: lt_2147483646_int64}, {idx: 26, exp: le, fn: le_2147483646_int64}, {idx: 26, exp: gt, fn: gt_2147483646_int64}, {idx: 26, exp: ge, fn: ge_2147483646_int64}, {idx: 26, exp: eq, fn: eq_2147483646_int64}, {idx: 26, exp: ne, fn: ne_2147483646_int64}, {idx: 27, exp: lt, fn: lt_2147483647_int64}, {idx: 27, exp: le, fn: le_2147483647_int64}, {idx: 27, exp: gt, fn: gt_2147483647_int64}, {idx: 27, exp: ge, fn: ge_2147483647_int64}, {idx: 27, exp: eq, fn: eq_2147483647_int64}, {idx: 27, exp: ne, fn: ne_2147483647_int64}, {idx: 28, exp: lt, fn: lt_2147483648_int64}, {idx: 28, exp: le, fn: le_2147483648_int64}, {idx: 28, exp: gt, fn: gt_2147483648_int64}, {idx: 28, exp: ge, fn: ge_2147483648_int64}, {idx: 28, exp: eq, fn: eq_2147483648_int64}, {idx: 28, exp: ne, fn: ne_2147483648_int64}, {idx: 29, exp: lt, fn: lt_4278190080_int64}, {idx: 29, exp: le, fn: le_4278190080_int64}, {idx: 29, exp: gt, fn: gt_4278190080_int64}, {idx: 29, exp: ge, fn: ge_4278190080_int64}, {idx: 29, exp: eq, fn: eq_4278190080_int64}, {idx: 29, exp: ne, fn: ne_4278190080_int64}, {idx: 30, exp: lt, fn: lt_4294967294_int64}, {idx: 30, exp: le, fn: le_4294967294_int64}, {idx: 30, exp: gt, fn: gt_4294967294_int64}, {idx: 30, exp: ge, fn: ge_4294967294_int64}, {idx: 30, exp: eq, fn: eq_4294967294_int64}, {idx: 30, exp: ne, fn: ne_4294967294_int64}, {idx: 31, exp: lt, fn: lt_4294967295_int64}, {idx: 31, exp: le, fn: le_4294967295_int64}, {idx: 31, exp: gt, fn: gt_4294967295_int64}, {idx: 31, exp: ge, fn: ge_4294967295_int64}, {idx: 31, exp: eq, fn: eq_4294967295_int64}, {idx: 31, exp: ne, fn: ne_4294967295_int64}, {idx: 32, exp: lt, fn: lt_4294967296_int64}, {idx: 32, exp: le, fn: le_4294967296_int64}, {idx: 32, exp: gt, fn: gt_4294967296_int64}, {idx: 32, exp: ge, fn: ge_4294967296_int64}, {idx: 32, exp: eq, fn: eq_4294967296_int64}, {idx: 32, exp: ne, fn: ne_4294967296_int64}, {idx: 33, exp: lt, fn: lt_1095216660480_int64}, {idx: 33, exp: le, fn: le_1095216660480_int64}, {idx: 33, exp: gt, fn: gt_1095216660480_int64}, {idx: 33, exp: ge, fn: ge_1095216660480_int64}, {idx: 33, exp: eq, fn: eq_1095216660480_int64}, {idx: 33, exp: ne, fn: ne_1095216660480_int64}, {idx: 34, exp: lt, fn: lt_9223372036854775806_int64}, {idx: 34, exp: le, fn: le_9223372036854775806_int64}, {idx: 34, exp: gt, fn: gt_9223372036854775806_int64}, {idx: 34, exp: ge, fn: ge_9223372036854775806_int64}, {idx: 34, exp: eq, fn: eq_9223372036854775806_int64}, {idx: 34, exp: ne, fn: ne_9223372036854775806_int64}, {idx: 35, exp: lt, fn: lt_9223372036854775807_int64}, {idx: 35, exp: le, fn: le_9223372036854775807_int64}, {idx: 35, exp: gt, fn: gt_9223372036854775807_int64}, {idx: 35, exp: ge, fn: ge_9223372036854775807_int64}, {idx: 35, exp: eq, fn: eq_9223372036854775807_int64}, {idx: 35, exp: ne, fn: ne_9223372036854775807_int64}, } // int32 tests var int32_vals = []int32{ -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 126, 127, 128, 254, 255, 256, 32766, 32767, 32768, 65534, 65535, 65536, 2147483646, 2147483647, } func lt_neg2147483648_int32(x int32) bool { return x < -2147483648 } func le_neg2147483648_int32(x int32) bool { return x <= -2147483648 } func gt_neg2147483648_int32(x int32) bool { return x > -2147483648 } func ge_neg2147483648_int32(x int32) bool { return x >= -2147483648 } func eq_neg2147483648_int32(x int32) bool { return x == -2147483648 } func ne_neg2147483648_int32(x int32) bool { return x != -2147483648 } func lt_neg2147483647_int32(x int32) bool { return x < -2147483647 } func le_neg2147483647_int32(x int32) bool { return x <= -2147483647 } func gt_neg2147483647_int32(x int32) bool { return x > -2147483647 } func ge_neg2147483647_int32(x int32) bool { return x >= -2147483647 } func eq_neg2147483647_int32(x int32) bool { return x == -2147483647 } func ne_neg2147483647_int32(x int32) bool { return x != -2147483647 } func lt_neg32769_int32(x int32) bool { return x < -32769 } func le_neg32769_int32(x int32) bool { return x <= -32769 } func gt_neg32769_int32(x int32) bool { return x > -32769 } func ge_neg32769_int32(x int32) bool { return x >= -32769 } func eq_neg32769_int32(x int32) bool { return x == -32769 } func ne_neg32769_int32(x int32) bool { return x != -32769 } func lt_neg32768_int32(x int32) bool { return x < -32768 } func le_neg32768_int32(x int32) bool { return x <= -32768 } func gt_neg32768_int32(x int32) bool { return x > -32768 } func ge_neg32768_int32(x int32) bool { return x >= -32768 } func eq_neg32768_int32(x int32) bool { return x == -32768 } func ne_neg32768_int32(x int32) bool { return x != -32768 } func lt_neg32767_int32(x int32) bool { return x < -32767 } func le_neg32767_int32(x int32) bool { return x <= -32767 } func gt_neg32767_int32(x int32) bool { return x > -32767 } func ge_neg32767_int32(x int32) bool { return x >= -32767 } func eq_neg32767_int32(x int32) bool { return x == -32767 } func ne_neg32767_int32(x int32) bool { return x != -32767 } func lt_neg129_int32(x int32) bool { return x < -129 } func le_neg129_int32(x int32) bool { return x <= -129 } func gt_neg129_int32(x int32) bool { return x > -129 } func ge_neg129_int32(x int32) bool { return x >= -129 } func eq_neg129_int32(x int32) bool { return x == -129 } func ne_neg129_int32(x int32) bool { return x != -129 } func lt_neg128_int32(x int32) bool { return x < -128 } func le_neg128_int32(x int32) bool { return x <= -128 } func gt_neg128_int32(x int32) bool { return x > -128 } func ge_neg128_int32(x int32) bool { return x >= -128 } func eq_neg128_int32(x int32) bool { return x == -128 } func ne_neg128_int32(x int32) bool { return x != -128 } func lt_neg127_int32(x int32) bool { return x < -127 } func le_neg127_int32(x int32) bool { return x <= -127 } func gt_neg127_int32(x int32) bool { return x > -127 } func ge_neg127_int32(x int32) bool { return x >= -127 } func eq_neg127_int32(x int32) bool { return x == -127 } func ne_neg127_int32(x int32) bool { return x != -127 } func lt_neg1_int32(x int32) bool { return x < -1 } func le_neg1_int32(x int32) bool { return x <= -1 } func gt_neg1_int32(x int32) bool { return x > -1 } func ge_neg1_int32(x int32) bool { return x >= -1 } func eq_neg1_int32(x int32) bool { return x == -1 } func ne_neg1_int32(x int32) bool { return x != -1 } func lt_0_int32(x int32) bool { return x < 0 } func le_0_int32(x int32) bool { return x <= 0 } func gt_0_int32(x int32) bool { return x > 0 } func ge_0_int32(x int32) bool { return x >= 0 } func eq_0_int32(x int32) bool { return x == 0 } func ne_0_int32(x int32) bool { return x != 0 } func lt_1_int32(x int32) bool { return x < 1 } func le_1_int32(x int32) bool { return x <= 1 } func gt_1_int32(x int32) bool { return x > 1 } func ge_1_int32(x int32) bool { return x >= 1 } func eq_1_int32(x int32) bool { return x == 1 } func ne_1_int32(x int32) bool { return x != 1 } func lt_126_int32(x int32) bool { return x < 126 } func le_126_int32(x int32) bool { return x <= 126 } func gt_126_int32(x int32) bool { return x > 126 } func ge_126_int32(x int32) bool { return x >= 126 } func eq_126_int32(x int32) bool { return x == 126 } func ne_126_int32(x int32) bool { return x != 126 } func lt_127_int32(x int32) bool { return x < 127 } func le_127_int32(x int32) bool { return x <= 127 } func gt_127_int32(x int32) bool { return x > 127 } func ge_127_int32(x int32) bool { return x >= 127 } func eq_127_int32(x int32) bool { return x == 127 } func ne_127_int32(x int32) bool { return x != 127 } func lt_128_int32(x int32) bool { return x < 128 } func le_128_int32(x int32) bool { return x <= 128 } func gt_128_int32(x int32) bool { return x > 128 } func ge_128_int32(x int32) bool { return x >= 128 } func eq_128_int32(x int32) bool { return x == 128 } func ne_128_int32(x int32) bool { return x != 128 } func lt_254_int32(x int32) bool { return x < 254 } func le_254_int32(x int32) bool { return x <= 254 } func gt_254_int32(x int32) bool { return x > 254 } func ge_254_int32(x int32) bool { return x >= 254 } func eq_254_int32(x int32) bool { return x == 254 } func ne_254_int32(x int32) bool { return x != 254 } func lt_255_int32(x int32) bool { return x < 255 } func le_255_int32(x int32) bool { return x <= 255 } func gt_255_int32(x int32) bool { return x > 255 } func ge_255_int32(x int32) bool { return x >= 255 } func eq_255_int32(x int32) bool { return x == 255 } func ne_255_int32(x int32) bool { return x != 255 } func lt_256_int32(x int32) bool { return x < 256 } func le_256_int32(x int32) bool { return x <= 256 } func gt_256_int32(x int32) bool { return x > 256 } func ge_256_int32(x int32) bool { return x >= 256 } func eq_256_int32(x int32) bool { return x == 256 } func ne_256_int32(x int32) bool { return x != 256 } func lt_32766_int32(x int32) bool { return x < 32766 } func le_32766_int32(x int32) bool { return x <= 32766 } func gt_32766_int32(x int32) bool { return x > 32766 } func ge_32766_int32(x int32) bool { return x >= 32766 } func eq_32766_int32(x int32) bool { return x == 32766 } func ne_32766_int32(x int32) bool { return x != 32766 } func lt_32767_int32(x int32) bool { return x < 32767 } func le_32767_int32(x int32) bool { return x <= 32767 } func gt_32767_int32(x int32) bool { return x > 32767 } func ge_32767_int32(x int32) bool { return x >= 32767 } func eq_32767_int32(x int32) bool { return x == 32767 } func ne_32767_int32(x int32) bool { return x != 32767 } func lt_32768_int32(x int32) bool { return x < 32768 } func le_32768_int32(x int32) bool { return x <= 32768 } func gt_32768_int32(x int32) bool { return x > 32768 } func ge_32768_int32(x int32) bool { return x >= 32768 } func eq_32768_int32(x int32) bool { return x == 32768 } func ne_32768_int32(x int32) bool { return x != 32768 } func lt_65534_int32(x int32) bool { return x < 65534 } func le_65534_int32(x int32) bool { return x <= 65534 } func gt_65534_int32(x int32) bool { return x > 65534 } func ge_65534_int32(x int32) bool { return x >= 65534 } func eq_65534_int32(x int32) bool { return x == 65534 } func ne_65534_int32(x int32) bool { return x != 65534 } func lt_65535_int32(x int32) bool { return x < 65535 } func le_65535_int32(x int32) bool { return x <= 65535 } func gt_65535_int32(x int32) bool { return x > 65535 } func ge_65535_int32(x int32) bool { return x >= 65535 } func eq_65535_int32(x int32) bool { return x == 65535 } func ne_65535_int32(x int32) bool { return x != 65535 } func lt_65536_int32(x int32) bool { return x < 65536 } func le_65536_int32(x int32) bool { return x <= 65536 } func gt_65536_int32(x int32) bool { return x > 65536 } func ge_65536_int32(x int32) bool { return x >= 65536 } func eq_65536_int32(x int32) bool { return x == 65536 } func ne_65536_int32(x int32) bool { return x != 65536 } func lt_2147483646_int32(x int32) bool { return x < 2147483646 } func le_2147483646_int32(x int32) bool { return x <= 2147483646 } func gt_2147483646_int32(x int32) bool { return x > 2147483646 } func ge_2147483646_int32(x int32) bool { return x >= 2147483646 } func eq_2147483646_int32(x int32) bool { return x == 2147483646 } func ne_2147483646_int32(x int32) bool { return x != 2147483646 } func lt_2147483647_int32(x int32) bool { return x < 2147483647 } func le_2147483647_int32(x int32) bool { return x <= 2147483647 } func gt_2147483647_int32(x int32) bool { return x > 2147483647 } func ge_2147483647_int32(x int32) bool { return x >= 2147483647 } func eq_2147483647_int32(x int32) bool { return x == 2147483647 } func ne_2147483647_int32(x int32) bool { return x != 2147483647 } var int32_tests = []struct { idx int // index of the constant used exp result // expected results fn func(int32) bool }{ {idx: 0, exp: lt, fn: lt_neg2147483648_int32}, {idx: 0, exp: le, fn: le_neg2147483648_int32}, {idx: 0, exp: gt, fn: gt_neg2147483648_int32}, {idx: 0, exp: ge, fn: ge_neg2147483648_int32}, {idx: 0, exp: eq, fn: eq_neg2147483648_int32}, {idx: 0, exp: ne, fn: ne_neg2147483648_int32}, {idx: 1, exp: lt, fn: lt_neg2147483647_int32}, {idx: 1, exp: le, fn: le_neg2147483647_int32}, {idx: 1, exp: gt, fn: gt_neg2147483647_int32}, {idx: 1, exp: ge, fn: ge_neg2147483647_int32}, {idx: 1, exp: eq, fn: eq_neg2147483647_int32}, {idx: 1, exp: ne, fn: ne_neg2147483647_int32}, {idx: 2, exp: lt, fn: lt_neg32769_int32}, {idx: 2, exp: le, fn: le_neg32769_int32}, {idx: 2, exp: gt, fn: gt_neg32769_int32}, {idx: 2, exp: ge, fn: ge_neg32769_int32}, {idx: 2, exp: eq, fn: eq_neg32769_int32}, {idx: 2, exp: ne, fn: ne_neg32769_int32}, {idx: 3, exp: lt, fn: lt_neg32768_int32}, {idx: 3, exp: le, fn: le_neg32768_int32}, {idx: 3, exp: gt, fn: gt_neg32768_int32}, {idx: 3, exp: ge, fn: ge_neg32768_int32}, {idx: 3, exp: eq, fn: eq_neg32768_int32}, {idx: 3, exp: ne, fn: ne_neg32768_int32}, {idx: 4, exp: lt, fn: lt_neg32767_int32}, {idx: 4, exp: le, fn: le_neg32767_int32}, {idx: 4, exp: gt, fn: gt_neg32767_int32}, {idx: 4, exp: ge, fn: ge_neg32767_int32}, {idx: 4, exp: eq, fn: eq_neg32767_int32}, {idx: 4, exp: ne, fn: ne_neg32767_int32}, {idx: 5, exp: lt, fn: lt_neg129_int32}, {idx: 5, exp: le, fn: le_neg129_int32}, {idx: 5, exp: gt, fn: gt_neg129_int32}, {idx: 5, exp: ge, fn: ge_neg129_int32}, {idx: 5, exp: eq, fn: eq_neg129_int32}, {idx: 5, exp: ne, fn: ne_neg129_int32}, {idx: 6, exp: lt, fn: lt_neg128_int32}, {idx: 6, exp: le, fn: le_neg128_int32}, {idx: 6, exp: gt, fn: gt_neg128_int32}, {idx: 6, exp: ge, fn: ge_neg128_int32}, {idx: 6, exp: eq, fn: eq_neg128_int32}, {idx: 6, exp: ne, fn: ne_neg128_int32}, {idx: 7, exp: lt, fn: lt_neg127_int32}, {idx: 7, exp: le, fn: le_neg127_int32}, {idx: 7, exp: gt, fn: gt_neg127_int32}, {idx: 7, exp: ge, fn: ge_neg127_int32}, {idx: 7, exp: eq, fn: eq_neg127_int32}, {idx: 7, exp: ne, fn: ne_neg127_int32}, {idx: 8, exp: lt, fn: lt_neg1_int32}, {idx: 8, exp: le, fn: le_neg1_int32}, {idx: 8, exp: gt, fn: gt_neg1_int32}, {idx: 8, exp: ge, fn: ge_neg1_int32}, {idx: 8, exp: eq, fn: eq_neg1_int32}, {idx: 8, exp: ne, fn: ne_neg1_int32}, {idx: 9, exp: lt, fn: lt_0_int32}, {idx: 9, exp: le, fn: le_0_int32}, {idx: 9, exp: gt, fn: gt_0_int32}, {idx: 9, exp: ge, fn: ge_0_int32}, {idx: 9, exp: eq, fn: eq_0_int32}, {idx: 9, exp: ne, fn: ne_0_int32}, {idx: 10, exp: lt, fn: lt_1_int32}, {idx: 10, exp: le, fn: le_1_int32}, {idx: 10, exp: gt, fn: gt_1_int32}, {idx: 10, exp: ge, fn: ge_1_int32}, {idx: 10, exp: eq, fn: eq_1_int32}, {idx: 10, exp: ne, fn: ne_1_int32}, {idx: 11, exp: lt, fn: lt_126_int32}, {idx: 11, exp: le, fn: le_126_int32}, {idx: 11, exp: gt, fn: gt_126_int32}, {idx: 11, exp: ge, fn: ge_126_int32}, {idx: 11, exp: eq, fn: eq_126_int32}, {idx: 11, exp: ne, fn: ne_126_int32}, {idx: 12, exp: lt, fn: lt_127_int32}, {idx: 12, exp: le, fn: le_127_int32}, {idx: 12, exp: gt, fn: gt_127_int32}, {idx: 12, exp: ge, fn: ge_127_int32}, {idx: 12, exp: eq, fn: eq_127_int32}, {idx: 12, exp: ne, fn: ne_127_int32}, {idx: 13, exp: lt, fn: lt_128_int32}, {idx: 13, exp: le, fn: le_128_int32}, {idx: 13, exp: gt, fn: gt_128_int32}, {idx: 13, exp: ge, fn: ge_128_int32}, {idx: 13, exp: eq, fn: eq_128_int32}, {idx: 13, exp: ne, fn: ne_128_int32}, {idx: 14, exp: lt, fn: lt_254_int32}, {idx: 14, exp: le, fn: le_254_int32}, {idx: 14, exp: gt, fn: gt_254_int32}, {idx: 14, exp: ge, fn: ge_254_int32}, {idx: 14, exp: eq, fn: eq_254_int32}, {idx: 14, exp: ne, fn: ne_254_int32}, {idx: 15, exp: lt, fn: lt_255_int32}, {idx: 15, exp: le, fn: le_255_int32}, {idx: 15, exp: gt, fn: gt_255_int32}, {idx: 15, exp: ge, fn: ge_255_int32}, {idx: 15, exp: eq, fn: eq_255_int32}, {idx: 15, exp: ne, fn: ne_255_int32}, {idx: 16, exp: lt, fn: lt_256_int32}, {idx: 16, exp: le, fn: le_256_int32}, {idx: 16, exp: gt, fn: gt_256_int32}, {idx: 16, exp: ge, fn: ge_256_int32}, {idx: 16, exp: eq, fn: eq_256_int32}, {idx: 16, exp: ne, fn: ne_256_int32}, {idx: 17, exp: lt, fn: lt_32766_int32}, {idx: 17, exp: le, fn: le_32766_int32}, {idx: 17, exp: gt, fn: gt_32766_int32}, {idx: 17, exp: ge, fn: ge_32766_int32}, {idx: 17, exp: eq, fn: eq_32766_int32}, {idx: 17, exp: ne, fn: ne_32766_int32}, {idx: 18, exp: lt, fn: lt_32767_int32}, {idx: 18, exp: le, fn: le_32767_int32}, {idx: 18, exp: gt, fn: gt_32767_int32}, {idx: 18, exp: ge, fn: ge_32767_int32}, {idx: 18, exp: eq, fn: eq_32767_int32}, {idx: 18, exp: ne, fn: ne_32767_int32}, {idx: 19, exp: lt, fn: lt_32768_int32}, {idx: 19, exp: le, fn: le_32768_int32}, {idx: 19, exp: gt, fn: gt_32768_int32}, {idx: 19, exp: ge, fn: ge_32768_int32}, {idx: 19, exp: eq, fn: eq_32768_int32}, {idx: 19, exp: ne, fn: ne_32768_int32}, {idx: 20, exp: lt, fn: lt_65534_int32}, {idx: 20, exp: le, fn: le_65534_int32}, {idx: 20, exp: gt, fn: gt_65534_int32}, {idx: 20, exp: ge, fn: ge_65534_int32}, {idx: 20, exp: eq, fn: eq_65534_int32}, {idx: 20, exp: ne, fn: ne_65534_int32}, {idx: 21, exp: lt, fn: lt_65535_int32}, {idx: 21, exp: le, fn: le_65535_int32}, {idx: 21, exp: gt, fn: gt_65535_int32}, {idx: 21, exp: ge, fn: ge_65535_int32}, {idx: 21, exp: eq, fn: eq_65535_int32}, {idx: 21, exp: ne, fn: ne_65535_int32}, {idx: 22, exp: lt, fn: lt_65536_int32}, {idx: 22, exp: le, fn: le_65536_int32}, {idx: 22, exp: gt, fn: gt_65536_int32}, {idx: 22, exp: ge, fn: ge_65536_int32}, {idx: 22, exp: eq, fn: eq_65536_int32}, {idx: 22, exp: ne, fn: ne_65536_int32}, {idx: 23, exp: lt, fn: lt_2147483646_int32}, {idx: 23, exp: le, fn: le_2147483646_int32}, {idx: 23, exp: gt, fn: gt_2147483646_int32}, {idx: 23, exp: ge, fn: ge_2147483646_int32}, {idx: 23, exp: eq, fn: eq_2147483646_int32}, {idx: 23, exp: ne, fn: ne_2147483646_int32}, {idx: 24, exp: lt, fn: lt_2147483647_int32}, {idx: 24, exp: le, fn: le_2147483647_int32}, {idx: 24, exp: gt, fn: gt_2147483647_int32}, {idx: 24, exp: ge, fn: ge_2147483647_int32}, {idx: 24, exp: eq, fn: eq_2147483647_int32}, {idx: 24, exp: ne, fn: ne_2147483647_int32}, } // int16 tests var int16_vals = []int16{ -32768, -32767, -129, -128, -127, -1, 0, 1, 126, 127, 128, 254, 255, 256, 32766, 32767, } func lt_neg32768_int16(x int16) bool { return x < -32768 } func le_neg32768_int16(x int16) bool { return x <= -32768 } func gt_neg32768_int16(x int16) bool { return x > -32768 } func ge_neg32768_int16(x int16) bool { return x >= -32768 } func eq_neg32768_int16(x int16) bool { return x == -32768 } func ne_neg32768_int16(x int16) bool { return x != -32768 } func lt_neg32767_int16(x int16) bool { return x < -32767 } func le_neg32767_int16(x int16) bool { return x <= -32767 } func gt_neg32767_int16(x int16) bool { return x > -32767 } func ge_neg32767_int16(x int16) bool { return x >= -32767 } func eq_neg32767_int16(x int16) bool { return x == -32767 } func ne_neg32767_int16(x int16) bool { return x != -32767 } func lt_neg129_int16(x int16) bool { return x < -129 } func le_neg129_int16(x int16) bool { return x <= -129 } func gt_neg129_int16(x int16) bool { return x > -129 } func ge_neg129_int16(x int16) bool { return x >= -129 } func eq_neg129_int16(x int16) bool { return x == -129 } func ne_neg129_int16(x int16) bool { return x != -129 } func lt_neg128_int16(x int16) bool { return x < -128 } func le_neg128_int16(x int16) bool { return x <= -128 } func gt_neg128_int16(x int16) bool { return x > -128 } func ge_neg128_int16(x int16) bool { return x >= -128 } func eq_neg128_int16(x int16) bool { return x == -128 } func ne_neg128_int16(x int16) bool { return x != -128 } func lt_neg127_int16(x int16) bool { return x < -127 } func le_neg127_int16(x int16) bool { return x <= -127 } func gt_neg127_int16(x int16) bool { return x > -127 } func ge_neg127_int16(x int16) bool { return x >= -127 } func eq_neg127_int16(x int16) bool { return x == -127 } func ne_neg127_int16(x int16) bool { return x != -127 } func lt_neg1_int16(x int16) bool { return x < -1 } func le_neg1_int16(x int16) bool { return x <= -1 } func gt_neg1_int16(x int16) bool { return x > -1 } func ge_neg1_int16(x int16) bool { return x >= -1 } func eq_neg1_int16(x int16) bool { return x == -1 } func ne_neg1_int16(x int16) bool { return x != -1 } func lt_0_int16(x int16) bool { return x < 0 } func le_0_int16(x int16) bool { return x <= 0 } func gt_0_int16(x int16) bool { return x > 0 } func ge_0_int16(x int16) bool { return x >= 0 } func eq_0_int16(x int16) bool { return x == 0 } func ne_0_int16(x int16) bool { return x != 0 } func lt_1_int16(x int16) bool { return x < 1 } func le_1_int16(x int16) bool { return x <= 1 } func gt_1_int16(x int16) bool { return x > 1 } func ge_1_int16(x int16) bool { return x >= 1 } func eq_1_int16(x int16) bool { return x == 1 } func ne_1_int16(x int16) bool { return x != 1 } func lt_126_int16(x int16) bool { return x < 126 } func le_126_int16(x int16) bool { return x <= 126 } func gt_126_int16(x int16) bool { return x > 126 } func ge_126_int16(x int16) bool { return x >= 126 } func eq_126_int16(x int16) bool { return x == 126 } func ne_126_int16(x int16) bool { return x != 126 } func lt_127_int16(x int16) bool { return x < 127 } func le_127_int16(x int16) bool { return x <= 127 } func gt_127_int16(x int16) bool { return x > 127 } func ge_127_int16(x int16) bool { return x >= 127 } func eq_127_int16(x int16) bool { return x == 127 } func ne_127_int16(x int16) bool { return x != 127 } func lt_128_int16(x int16) bool { return x < 128 } func le_128_int16(x int16) bool { return x <= 128 } func gt_128_int16(x int16) bool { return x > 128 } func ge_128_int16(x int16) bool { return x >= 128 } func eq_128_int16(x int16) bool { return x == 128 } func ne_128_int16(x int16) bool { return x != 128 } func lt_254_int16(x int16) bool { return x < 254 } func le_254_int16(x int16) bool { return x <= 254 } func gt_254_int16(x int16) bool { return x > 254 } func ge_254_int16(x int16) bool { return x >= 254 } func eq_254_int16(x int16) bool { return x == 254 } func ne_254_int16(x int16) bool { return x != 254 } func lt_255_int16(x int16) bool { return x < 255 } func le_255_int16(x int16) bool { return x <= 255 } func gt_255_int16(x int16) bool { return x > 255 } func ge_255_int16(x int16) bool { return x >= 255 } func eq_255_int16(x int16) bool { return x == 255 } func ne_255_int16(x int16) bool { return x != 255 } func lt_256_int16(x int16) bool { return x < 256 } func le_256_int16(x int16) bool { return x <= 256 } func gt_256_int16(x int16) bool { return x > 256 } func ge_256_int16(x int16) bool { return x >= 256 } func eq_256_int16(x int16) bool { return x == 256 } func ne_256_int16(x int16) bool { return x != 256 } func lt_32766_int16(x int16) bool { return x < 32766 } func le_32766_int16(x int16) bool { return x <= 32766 } func gt_32766_int16(x int16) bool { return x > 32766 } func ge_32766_int16(x int16) bool { return x >= 32766 } func eq_32766_int16(x int16) bool { return x == 32766 } func ne_32766_int16(x int16) bool { return x != 32766 } func lt_32767_int16(x int16) bool { return x < 32767 } func le_32767_int16(x int16) bool { return x <= 32767 } func gt_32767_int16(x int16) bool { return x > 32767 } func ge_32767_int16(x int16) bool { return x >= 32767 } func eq_32767_int16(x int16) bool { return x == 32767 } func ne_32767_int16(x int16) bool { return x != 32767 } var int16_tests = []struct { idx int // index of the constant used exp result // expected results fn func(int16) bool }{ {idx: 0, exp: lt, fn: lt_neg32768_int16}, {idx: 0, exp: le, fn: le_neg32768_int16}, {idx: 0, exp: gt, fn: gt_neg32768_int16}, {idx: 0, exp: ge, fn: ge_neg32768_int16}, {idx: 0, exp: eq, fn: eq_neg32768_int16}, {idx: 0, exp: ne, fn: ne_neg32768_int16}, {idx: 1, exp: lt, fn: lt_neg32767_int16}, {idx: 1, exp: le, fn: le_neg32767_int16}, {idx: 1, exp: gt, fn: gt_neg32767_int16}, {idx: 1, exp: ge, fn: ge_neg32767_int16}, {idx: 1, exp: eq, fn: eq_neg32767_int16}, {idx: 1, exp: ne, fn: ne_neg32767_int16}, {idx: 2, exp: lt, fn: lt_neg129_int16}, {idx: 2, exp: le, fn: le_neg129_int16}, {idx: 2, exp: gt, fn: gt_neg129_int16}, {idx: 2, exp: ge, fn: ge_neg129_int16}, {idx: 2, exp: eq, fn: eq_neg129_int16}, {idx: 2, exp: ne, fn: ne_neg129_int16}, {idx: 3, exp: lt, fn: lt_neg128_int16}, {idx: 3, exp: le, fn: le_neg128_int16}, {idx: 3, exp: gt, fn: gt_neg128_int16}, {idx: 3, exp: ge, fn: ge_neg128_int16}, {idx: 3, exp: eq, fn: eq_neg128_int16}, {idx: 3, exp: ne, fn: ne_neg128_int16}, {idx: 4, exp: lt, fn: lt_neg127_int16}, {idx: 4, exp: le, fn: le_neg127_int16}, {idx: 4, exp: gt, fn: gt_neg127_int16}, {idx: 4, exp: ge, fn: ge_neg127_int16}, {idx: 4, exp: eq, fn: eq_neg127_int16}, {idx: 4, exp: ne, fn: ne_neg127_int16}, {idx: 5, exp: lt, fn: lt_neg1_int16}, {idx: 5, exp: le, fn: le_neg1_int16}, {idx: 5, exp: gt, fn: gt_neg1_int16}, {idx: 5, exp: ge, fn: ge_neg1_int16}, {idx: 5, exp: eq, fn: eq_neg1_int16}, {idx: 5, exp: ne, fn: ne_neg1_int16}, {idx: 6, exp: lt, fn: lt_0_int16}, {idx: 6, exp: le, fn: le_0_int16}, {idx: 6, exp: gt, fn: gt_0_int16}, {idx: 6, exp: ge, fn: ge_0_int16}, {idx: 6, exp: eq, fn: eq_0_int16}, {idx: 6, exp: ne, fn: ne_0_int16}, {idx: 7, exp: lt, fn: lt_1_int16}, {idx: 7, exp: le, fn: le_1_int16}, {idx: 7, exp: gt, fn: gt_1_int16}, {idx: 7, exp: ge, fn: ge_1_int16}, {idx: 7, exp: eq, fn: eq_1_int16}, {idx: 7, exp: ne, fn: ne_1_int16}, {idx: 8, exp: lt, fn: lt_126_int16}, {idx: 8, exp: le, fn: le_126_int16}, {idx: 8, exp: gt, fn: gt_126_int16}, {idx: 8, exp: ge, fn: ge_126_int16}, {idx: 8, exp: eq, fn: eq_126_int16}, {idx: 8, exp: ne, fn: ne_126_int16}, {idx: 9, exp: lt, fn: lt_127_int16}, {idx: 9, exp: le, fn: le_127_int16}, {idx: 9, exp: gt, fn: gt_127_int16}, {idx: 9, exp: ge, fn: ge_127_int16}, {idx: 9, exp: eq, fn: eq_127_int16}, {idx: 9, exp: ne, fn: ne_127_int16}, {idx: 10, exp: lt, fn: lt_128_int16}, {idx: 10, exp: le, fn: le_128_int16}, {idx: 10, exp: gt, fn: gt_128_int16}, {idx: 10, exp: ge, fn: ge_128_int16}, {idx: 10, exp: eq, fn: eq_128_int16}, {idx: 10, exp: ne, fn: ne_128_int16}, {idx: 11, exp: lt, fn: lt_254_int16}, {idx: 11, exp: le, fn: le_254_int16}, {idx: 11, exp: gt, fn: gt_254_int16}, {idx: 11, exp: ge, fn: ge_254_int16}, {idx: 11, exp: eq, fn: eq_254_int16}, {idx: 11, exp: ne, fn: ne_254_int16}, {idx: 12, exp: lt, fn: lt_255_int16}, {idx: 12, exp: le, fn: le_255_int16}, {idx: 12, exp: gt, fn: gt_255_int16}, {idx: 12, exp: ge, fn: ge_255_int16}, {idx: 12, exp: eq, fn: eq_255_int16}, {idx: 12, exp: ne, fn: ne_255_int16}, {idx: 13, exp: lt, fn: lt_256_int16}, {idx: 13, exp: le, fn: le_256_int16}, {idx: 13, exp: gt, fn: gt_256_int16}, {idx: 13, exp: ge, fn: ge_256_int16}, {idx: 13, exp: eq, fn: eq_256_int16}, {idx: 13, exp: ne, fn: ne_256_int16}, {idx: 14, exp: lt, fn: lt_32766_int16}, {idx: 14, exp: le, fn: le_32766_int16}, {idx: 14, exp: gt, fn: gt_32766_int16}, {idx: 14, exp: ge, fn: ge_32766_int16}, {idx: 14, exp: eq, fn: eq_32766_int16}, {idx: 14, exp: ne, fn: ne_32766_int16}, {idx: 15, exp: lt, fn: lt_32767_int16}, {idx: 15, exp: le, fn: le_32767_int16}, {idx: 15, exp: gt, fn: gt_32767_int16}, {idx: 15, exp: ge, fn: ge_32767_int16}, {idx: 15, exp: eq, fn: eq_32767_int16}, {idx: 15, exp: ne, fn: ne_32767_int16}, } // int8 tests var int8_vals = []int8{ -128, -127, -1, 0, 1, 126, 127, } func lt_neg128_int8(x int8) bool { return x < -128 } func le_neg128_int8(x int8) bool { return x <= -128 } func gt_neg128_int8(x int8) bool { return x > -128 } func ge_neg128_int8(x int8) bool { return x >= -128 } func eq_neg128_int8(x int8) bool { return x == -128 } func ne_neg128_int8(x int8) bool { return x != -128 } func lt_neg127_int8(x int8) bool { return x < -127 } func le_neg127_int8(x int8) bool { return x <= -127 } func gt_neg127_int8(x int8) bool { return x > -127 } func ge_neg127_int8(x int8) bool { return x >= -127 } func eq_neg127_int8(x int8) bool { return x == -127 } func ne_neg127_int8(x int8) bool { return x != -127 } func lt_neg1_int8(x int8) bool { return x < -1 } func le_neg1_int8(x int8) bool { return x <= -1 } func gt_neg1_int8(x int8) bool { return x > -1 } func ge_neg1_int8(x int8) bool { return x >= -1 } func eq_neg1_int8(x int8) bool { return x == -1 } func ne_neg1_int8(x int8) bool { return x != -1 } func lt_0_int8(x int8) bool { return x < 0 } func le_0_int8(x int8) bool { return x <= 0 } func gt_0_int8(x int8) bool { return x > 0 } func ge_0_int8(x int8) bool { return x >= 0 } func eq_0_int8(x int8) bool { return x == 0 } func ne_0_int8(x int8) bool { return x != 0 } func lt_1_int8(x int8) bool { return x < 1 } func le_1_int8(x int8) bool { return x <= 1 } func gt_1_int8(x int8) bool { return x > 1 } func ge_1_int8(x int8) bool { return x >= 1 } func eq_1_int8(x int8) bool { return x == 1 } func ne_1_int8(x int8) bool { return x != 1 } func lt_126_int8(x int8) bool { return x < 126 } func le_126_int8(x int8) bool { return x <= 126 } func gt_126_int8(x int8) bool { return x > 126 } func ge_126_int8(x int8) bool { return x >= 126 } func eq_126_int8(x int8) bool { return x == 126 } func ne_126_int8(x int8) bool { return x != 126 } func lt_127_int8(x int8) bool { return x < 127 } func le_127_int8(x int8) bool { return x <= 127 } func gt_127_int8(x int8) bool { return x > 127 } func ge_127_int8(x int8) bool { return x >= 127 } func eq_127_int8(x int8) bool { return x == 127 } func ne_127_int8(x int8) bool { return x != 127 } var int8_tests = []struct { idx int // index of the constant used exp result // expected results fn func(int8) bool }{ {idx: 0, exp: lt, fn: lt_neg128_int8}, {idx: 0, exp: le, fn: le_neg128_int8}, {idx: 0, exp: gt, fn: gt_neg128_int8}, {idx: 0, exp: ge, fn: ge_neg128_int8}, {idx: 0, exp: eq, fn: eq_neg128_int8}, {idx: 0, exp: ne, fn: ne_neg128_int8}, {idx: 1, exp: lt, fn: lt_neg127_int8}, {idx: 1, exp: le, fn: le_neg127_int8}, {idx: 1, exp: gt, fn: gt_neg127_int8}, {idx: 1, exp: ge, fn: ge_neg127_int8}, {idx: 1, exp: eq, fn: eq_neg127_int8}, {idx: 1, exp: ne, fn: ne_neg127_int8}, {idx: 2, exp: lt, fn: lt_neg1_int8}, {idx: 2, exp: le, fn: le_neg1_int8}, {idx: 2, exp: gt, fn: gt_neg1_int8}, {idx: 2, exp: ge, fn: ge_neg1_int8}, {idx: 2, exp: eq, fn: eq_neg1_int8}, {idx: 2, exp: ne, fn: ne_neg1_int8}, {idx: 3, exp: lt, fn: lt_0_int8}, {idx: 3, exp: le, fn: le_0_int8}, {idx: 3, exp: gt, fn: gt_0_int8}, {idx: 3, exp: ge, fn: ge_0_int8}, {idx: 3, exp: eq, fn: eq_0_int8}, {idx: 3, exp: ne, fn: ne_0_int8}, {idx: 4, exp: lt, fn: lt_1_int8}, {idx: 4, exp: le, fn: le_1_int8}, {idx: 4, exp: gt, fn: gt_1_int8}, {idx: 4, exp: ge, fn: ge_1_int8}, {idx: 4, exp: eq, fn: eq_1_int8}, {idx: 4, exp: ne, fn: ne_1_int8}, {idx: 5, exp: lt, fn: lt_126_int8}, {idx: 5, exp: le, fn: le_126_int8}, {idx: 5, exp: gt, fn: gt_126_int8}, {idx: 5, exp: ge, fn: ge_126_int8}, {idx: 5, exp: eq, fn: eq_126_int8}, {idx: 5, exp: ne, fn: ne_126_int8}, {idx: 6, exp: lt, fn: lt_127_int8}, {idx: 6, exp: le, fn: le_127_int8}, {idx: 6, exp: gt, fn: gt_127_int8}, {idx: 6, exp: ge, fn: ge_127_int8}, {idx: 6, exp: eq, fn: eq_127_int8}, {idx: 6, exp: ne, fn: ne_127_int8}, } // TestComparisonsConst tests results for comparison operations against constants. func TestComparisonsConst(t *testing.T) { for i, test := range uint64_tests { for j, x := range uint64_vals { want := test.exp.l if j == test.idx { want = test.exp.e } else if j > test.idx { want = test.exp.r } if test.fn(x) != want { fn := runtime.FuncForPC(reflect.ValueOf(test.fn).Pointer()).Name() t.Errorf("test failed: %v(%v) != %v [type=uint64 i=%v j=%v idx=%v]", fn, x, want, i, j, test.idx) } } } for i, test := range uint32_tests { for j, x := range uint32_vals { want := test.exp.l if j == test.idx { want = test.exp.e } else if j > test.idx { want = test.exp.r } if test.fn(x) != want { fn := runtime.FuncForPC(reflect.ValueOf(test.fn).Pointer()).Name() t.Errorf("test failed: %v(%v) != %v [type=uint32 i=%v j=%v idx=%v]", fn, x, want, i, j, test.idx) } } } for i, test := range uint16_tests { for j, x := range uint16_vals { want := test.exp.l if j == test.idx { want = test.exp.e } else if j > test.idx { want = test.exp.r } if test.fn(x) != want { fn := runtime.FuncForPC(reflect.ValueOf(test.fn).Pointer()).Name() t.Errorf("test failed: %v(%v) != %v [type=uint16 i=%v j=%v idx=%v]", fn, x, want, i, j, test.idx) } } } for i, test := range uint8_tests { for j, x := range uint8_vals { want := test.exp.l if j == test.idx { want = test.exp.e } else if j > test.idx { want = test.exp.r } if test.fn(x) != want { fn := runtime.FuncForPC(reflect.ValueOf(test.fn).Pointer()).Name() t.Errorf("test failed: %v(%v) != %v [type=uint8 i=%v j=%v idx=%v]", fn, x, want, i, j, test.idx) } } } for i, test := range int64_tests { for j, x := range int64_vals { want := test.exp.l if j == test.idx { want = test.exp.e } else if j > test.idx { want = test.exp.r } if test.fn(x) != want { fn := runtime.FuncForPC(reflect.ValueOf(test.fn).Pointer()).Name() t.Errorf("test failed: %v(%v) != %v [type=int64 i=%v j=%v idx=%v]", fn, x, want, i, j, test.idx) } } } for i, test := range int32_tests { for j, x := range int32_vals { want := test.exp.l if j == test.idx { want = test.exp.e } else if j > test.idx { want = test.exp.r } if test.fn(x) != want { fn := runtime.FuncForPC(reflect.ValueOf(test.fn).Pointer()).Name() t.Errorf("test failed: %v(%v) != %v [type=int32 i=%v j=%v idx=%v]", fn, x, want, i, j, test.idx) } } } for i, test := range int16_tests { for j, x := range int16_vals { want := test.exp.l if j == test.idx { want = test.exp.e } else if j > test.idx { want = test.exp.r } if test.fn(x) != want { fn := runtime.FuncForPC(reflect.ValueOf(test.fn).Pointer()).Name() t.Errorf("test failed: %v(%v) != %v [type=int16 i=%v j=%v idx=%v]", fn, x, want, i, j, test.idx) } } } for i, test := range int8_tests { for j, x := range int8_vals { want := test.exp.l if j == test.idx { want = test.exp.e } else if j > test.idx { want = test.exp.r } if test.fn(x) != want { fn := runtime.FuncForPC(reflect.ValueOf(test.fn).Pointer()).Name() t.Errorf("test failed: %v(%v) != %v [type=int8 i=%v j=%v idx=%v]", fn, x, want, i, j, test.idx) } } } } PK ! Y8G� � testdata/mysort/mysort.gonu �[��� // Copyright 2021 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. // Generic sort function, tested with two different pointer types. package mysort import ( "fmt" ) type LessConstraint[T any] interface { Less(T) bool } //go:noinline func Sort[T LessConstraint[T]](x []T) { n := len(x) for i := 1; i < n; i++ { for j := i; j > 0 && x[j].Less(x[j-1]); j-- { x[j], x[j-1] = x[j-1], x[j] } } } type MyInt struct { Value int } func (a *MyInt) Less(b *MyInt) bool { return a.Value < b.Value } //go:noinline func F() { sl1 := []*MyInt{&MyInt{4}, &MyInt{3}, &MyInt{8}, &MyInt{7}} Sort(sl1) fmt.Printf("%v %v %v %v\n", sl1[0], sl1[1], sl1[2], sl1[3]) } PK ! �>ͅ � testdata/namedReturn_test.gonu �[��� // 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. // This test makes sure that naming named // return variables in a return statement works. // See issue #14904. package main import ( "runtime" "testing" ) // Our heap-allocated object that will be GC'd incorrectly. // Note that we always check the second word because that's // where 0xdeaddeaddeaddead is written. type B [4]int // small (SSAable) array type A1 [3]*B //go:noinline func f1() (t A1) { t[0] = &B{91, 92, 93, 94} runtime.GC() return t } // large (non-SSAable) array type A2 [8]*B //go:noinline func f2() (t A2) { t[0] = &B{91, 92, 93, 94} runtime.GC() return t } // small (SSAable) struct type A3 struct { a, b, c *B } //go:noinline func f3() (t A3) { t.a = &B{91, 92, 93, 94} runtime.GC() return t } // large (non-SSAable) struct type A4 struct { a, b, c, d, e, f *B } //go:noinline func f4() (t A4) { t.a = &B{91, 92, 93, 94} runtime.GC() return t } var sink *B func f5() int { b := &B{91, 92, 93, 94} t := A4{b, nil, nil, nil, nil, nil} sink = b // make sure b is heap allocated ... sink = nil // ... but not live runtime.GC() t = t return t.a[1] } func TestNamedReturn(t *testing.T) { if v := f1()[0][1]; v != 92 { t.Errorf("f1()[0][1]=%d, want 92\n", v) } if v := f2()[0][1]; v != 92 { t.Errorf("f2()[0][1]=%d, want 92\n", v) } if v := f3().a[1]; v != 92 { t.Errorf("f3().a[1]=%d, want 92\n", v) } if v := f4().a[1]; v != 92 { t.Errorf("f4().a[1]=%d, want 92\n", v) } if v := f5(); v != 92 { t.Errorf("f5()=%d, want 92\n", v) } } PK ! o�! ! testdata/gen/arithConstGen.gonu �[��� // 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. // This program generates a test to verify that the standard arithmetic // operators properly handle const cases. The test file should be // generated with a known working version of go. // launch with `go run arithConstGen.go` a file called arithConst.go // will be written into the parent directory containing the tests package main import ( "bytes" "fmt" "go/format" "log" "strings" "text/template" ) type op struct { name, symbol string } type szD struct { name string sn string u []uint64 i []int64 oponly string } var szs = []szD{ {name: "uint64", sn: "64", u: []uint64{0, 1, 4294967296, 0x8000000000000000, 0xffffFFFFffffFFFF}}, {name: "uint64", sn: "64", u: []uint64{3, 5, 7, 9, 10, 11, 13, 19, 21, 25, 27, 37, 41, 45, 73, 81}, oponly: "mul"}, {name: "int64", sn: "64", i: []int64{-0x8000000000000000, -0x7FFFFFFFFFFFFFFF, -4294967296, -1, 0, 1, 4294967296, 0x7FFFFFFFFFFFFFFE, 0x7FFFFFFFFFFFFFFF}}, {name: "int64", sn: "64", i: []int64{-9, -5, -3, 3, 5, 7, 9, 10, 11, 13, 19, 21, 25, 27, 37, 41, 45, 73, 81}, oponly: "mul"}, {name: "uint32", sn: "32", u: []uint64{0, 1, 4294967295}}, {name: "uint32", sn: "32", u: []uint64{3, 5, 7, 9, 10, 11, 13, 19, 21, 25, 27, 37, 41, 45, 73, 81}, oponly: "mul"}, {name: "int32", sn: "32", i: []int64{-0x80000000, -0x7FFFFFFF, -1, 0, 1, 0x7FFFFFFF}}, {name: "int32", sn: "32", i: []int64{-9, -5, -3, 3, 5, 7, 9, 10, 11, 13, 19, 21, 25, 27, 37, 41, 45, 73, 81}, oponly: "mul"}, {name: "uint16", sn: "16", u: []uint64{0, 1, 65535}}, {name: "int16", sn: "16", i: []int64{-32768, -32767, -1, 0, 1, 32766, 32767}}, {name: "uint8", sn: "8", u: []uint64{0, 1, 255}}, {name: "int8", sn: "8", i: []int64{-128, -127, -1, 0, 1, 126, 127}}, } var ops = []op{ {"add", "+"}, {"sub", "-"}, {"div", "/"}, {"mul", "*"}, {"lsh", "<<"}, {"rsh", ">>"}, {"mod", "%"}, {"and", "&"}, {"or", "|"}, {"xor", "^"}, } // compute the result of i op j, cast as type t. func ansU(i, j uint64, t, op string) string { var ans uint64 switch op { case "+": ans = i + j case "-": ans = i - j case "*": ans = i * j case "/": if j != 0 { ans = i / j } case "%": if j != 0 { ans = i % j } case "<<": ans = i << j case ">>": ans = i >> j case "&": ans = i & j case "|": ans = i | j case "^": ans = i ^ j } switch t { case "uint32": ans = uint64(uint32(ans)) case "uint16": ans = uint64(uint16(ans)) case "uint8": ans = uint64(uint8(ans)) } return fmt.Sprintf("%d", ans) } // compute the result of i op j, cast as type t. func ansS(i, j int64, t, op string) string { var ans int64 switch op { case "+": ans = i + j case "-": ans = i - j case "*": ans = i * j case "/": if j != 0 { ans = i / j } case "%": if j != 0 { ans = i % j } case "<<": ans = i << uint64(j) case ">>": ans = i >> uint64(j) case "&": ans = i & j case "|": ans = i | j case "^": ans = i ^ j } switch t { case "int32": ans = int64(int32(ans)) case "int16": ans = int64(int16(ans)) case "int8": ans = int64(int8(ans)) } return fmt.Sprintf("%d", ans) } func main() { w := new(bytes.Buffer) fmt.Fprintf(w, "// Code generated by gen/arithConstGen.go. DO NOT EDIT.\n\n") fmt.Fprintf(w, "package main;\n") fmt.Fprintf(w, "import \"testing\"\n") fncCnst1 := template.Must(template.New("fnc").Parse( `//go:noinline func {{.Name}}_{{.Type_}}_{{.FNumber}}(a {{.Type_}}) {{.Type_}} { return a {{.Symbol}} {{.Number}} } `)) fncCnst2 := template.Must(template.New("fnc").Parse( `//go:noinline func {{.Name}}_{{.FNumber}}_{{.Type_}}(a {{.Type_}}) {{.Type_}} { return {{.Number}} {{.Symbol}} a } `)) type fncData struct { Name, Type_, Symbol, FNumber, Number string } for _, s := range szs { for _, o := range ops { if s.oponly != "" && s.oponly != o.name { continue } fd := fncData{o.name, s.name, o.symbol, "", ""} // unsigned test cases if len(s.u) > 0 { for _, i := range s.u { fd.Number = fmt.Sprintf("%d", i) fd.FNumber = strings.Replace(fd.Number, "-", "Neg", -1) // avoid division by zero if o.name != "mod" && o.name != "div" || i != 0 { // introduce uint64 cast for rhs shift operands // if they are too large for default uint type number := fd.Number if (o.name == "lsh" || o.name == "rsh") && uint64(uint32(i)) != i { fd.Number = fmt.Sprintf("uint64(%s)", number) } fncCnst1.Execute(w, fd) fd.Number = number } fncCnst2.Execute(w, fd) } } // signed test cases if len(s.i) > 0 { // don't generate tests for shifts by signed integers if o.name == "lsh" || o.name == "rsh" { continue } for _, i := range s.i { fd.Number = fmt.Sprintf("%d", i) fd.FNumber = strings.Replace(fd.Number, "-", "Neg", -1) // avoid division by zero if o.name != "mod" && o.name != "div" || i != 0 { fncCnst1.Execute(w, fd) } fncCnst2.Execute(w, fd) } } } } vrf1 := template.Must(template.New("vrf1").Parse(` test_{{.Size}}{fn: {{.Name}}_{{.FNumber}}_{{.Type_}}, fnname: "{{.Name}}_{{.FNumber}}_{{.Type_}}", in: {{.Input}}, want: {{.Ans}}},`)) vrf2 := template.Must(template.New("vrf2").Parse(` test_{{.Size}}{fn: {{.Name}}_{{.Type_}}_{{.FNumber}}, fnname: "{{.Name}}_{{.Type_}}_{{.FNumber}}", in: {{.Input}}, want: {{.Ans}}},`)) type cfncData struct { Size, Name, Type_, Symbol, FNumber, Number string Ans, Input string } for _, s := range szs { fmt.Fprintf(w, ` type test_%[1]s%[2]s struct { fn func (%[1]s) %[1]s fnname string in %[1]s want %[1]s } `, s.name, s.oponly) fmt.Fprintf(w, "var tests_%[1]s%[2]s =[]test_%[1]s {\n\n", s.name, s.oponly) if len(s.u) > 0 { for _, o := range ops { if s.oponly != "" && s.oponly != o.name { continue } fd := cfncData{s.name, o.name, s.name, o.symbol, "", "", "", ""} for _, i := range s.u { fd.Number = fmt.Sprintf("%d", i) fd.FNumber = strings.Replace(fd.Number, "-", "Neg", -1) // unsigned for _, j := range s.u { if o.name != "mod" && o.name != "div" || j != 0 { fd.Ans = ansU(i, j, s.name, o.symbol) fd.Input = fmt.Sprintf("%d", j) if err := vrf1.Execute(w, fd); err != nil { panic(err) } } if o.name != "mod" && o.name != "div" || i != 0 { fd.Ans = ansU(j, i, s.name, o.symbol) fd.Input = fmt.Sprintf("%d", j) if err := vrf2.Execute(w, fd); err != nil { panic(err) } } } } } } // signed if len(s.i) > 0 { for _, o := range ops { if s.oponly != "" && s.oponly != o.name { continue } // don't generate tests for shifts by signed integers if o.name == "lsh" || o.name == "rsh" { continue } fd := cfncData{s.name, o.name, s.name, o.symbol, "", "", "", ""} for _, i := range s.i { fd.Number = fmt.Sprintf("%d", i) fd.FNumber = strings.Replace(fd.Number, "-", "Neg", -1) for _, j := range s.i { if o.name != "mod" && o.name != "div" || j != 0 { fd.Ans = ansS(i, j, s.name, o.symbol) fd.Input = fmt.Sprintf("%d", j) if err := vrf1.Execute(w, fd); err != nil { panic(err) } } if o.name != "mod" && o.name != "div" || i != 0 { fd.Ans = ansS(j, i, s.name, o.symbol) fd.Input = fmt.Sprintf("%d", j) if err := vrf2.Execute(w, fd); err != nil { panic(err) } } } } } } fmt.Fprintf(w, "}\n\n") } fmt.Fprint(w, ` // TestArithmeticConst tests results for arithmetic operations against constants. func TestArithmeticConst(t *testing.T) { `) for _, s := range szs { fmt.Fprintf(w, `for _, test := range tests_%s%s {`, s.name, s.oponly) // Use WriteString here to avoid a vet warning about formatting directives. w.WriteString(`if got := test.fn(test.in); got != test.want { t.Errorf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want) } } `) } fmt.Fprint(w, ` } `) // gofmt result b := w.Bytes() src, err := format.Source(b) if err != nil { fmt.Printf("%s\n", b) panic(err) } // write to file err = os.WriteFile("../arithConst_test.go", src, 0666) if err != nil { log.Fatalf("can't write output: %v\n", err) } } PK ! �Bŀ� � testdata/gen/zeroGen.gonu �[��� // Copyright 2015 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 main import ( "bytes" "fmt" "go/format" "log" "os" ) // This program generates tests to verify that zeroing operations // zero the data they are supposed to and clobber no adjacent values. // run as `go run zeroGen.go`. A file called zero.go // will be written into the parent directory containing the tests. var sizes = [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 16, 17, 23, 24, 25, 31, 32, 33, 63, 64, 65, 1023, 1024, 1025} var usizes = [...]int{8, 16, 24, 32, 64, 256} func main() { w := new(bytes.Buffer) fmt.Fprintf(w, "// Code generated by gen/zeroGen.go. DO NOT EDIT.\n\n") fmt.Fprintf(w, "package main\n") fmt.Fprintf(w, "import \"testing\"\n") for _, s := range sizes { // type for test fmt.Fprintf(w, "type Z%d struct {\n", s) fmt.Fprintf(w, " pre [8]byte\n") fmt.Fprintf(w, " mid [%d]byte\n", s) fmt.Fprintf(w, " post [8]byte\n") fmt.Fprintf(w, "}\n") // function being tested fmt.Fprintf(w, "//go:noinline\n") fmt.Fprintf(w, "func zero%d_ssa(x *[%d]byte) {\n", s, s) fmt.Fprintf(w, " *x = [%d]byte{}\n", s) fmt.Fprintf(w, "}\n") // testing harness fmt.Fprintf(w, "func testZero%d(t *testing.T) {\n", s) fmt.Fprintf(w, " a := Z%d{[8]byte{255,255,255,255,255,255,255,255},[%d]byte{", s, s) for i := 0; i < s; i++ { fmt.Fprintf(w, "255,") } fmt.Fprintf(w, "},[8]byte{255,255,255,255,255,255,255,255}}\n") fmt.Fprintf(w, " zero%d_ssa(&a.mid)\n", s) fmt.Fprintf(w, " want := Z%d{[8]byte{255,255,255,255,255,255,255,255},[%d]byte{", s, s) for i := 0; i < s; i++ { fmt.Fprintf(w, "0,") } fmt.Fprintf(w, "},[8]byte{255,255,255,255,255,255,255,255}}\n") fmt.Fprintf(w, " if a != want {\n") fmt.Fprintf(w, " t.Errorf(\"zero%d got=%%v, want %%v\\n\", a, want)\n", s) fmt.Fprintf(w, " }\n") fmt.Fprintf(w, "}\n") } for _, s := range usizes { // type for test fmt.Fprintf(w, "type Z%du1 struct {\n", s) fmt.Fprintf(w, " b bool\n") fmt.Fprintf(w, " val [%d]byte\n", s) fmt.Fprintf(w, "}\n") fmt.Fprintf(w, "type Z%du2 struct {\n", s) fmt.Fprintf(w, " i uint16\n") fmt.Fprintf(w, " val [%d]byte\n", s) fmt.Fprintf(w, "}\n") // function being tested fmt.Fprintf(w, "//go:noinline\n") fmt.Fprintf(w, "func zero%du1_ssa(t *Z%du1) {\n", s, s) fmt.Fprintf(w, " t.val = [%d]byte{}\n", s) fmt.Fprintf(w, "}\n") // function being tested fmt.Fprintf(w, "//go:noinline\n") fmt.Fprintf(w, "func zero%du2_ssa(t *Z%du2) {\n", s, s) fmt.Fprintf(w, " t.val = [%d]byte{}\n", s) fmt.Fprintf(w, "}\n") // testing harness fmt.Fprintf(w, "func testZero%du(t *testing.T) {\n", s) fmt.Fprintf(w, " a := Z%du1{false, [%d]byte{", s, s) for i := 0; i < s; i++ { fmt.Fprintf(w, "255,") } fmt.Fprintf(w, "}}\n") fmt.Fprintf(w, " zero%du1_ssa(&a)\n", s) fmt.Fprintf(w, " want := Z%du1{false, [%d]byte{", s, s) for i := 0; i < s; i++ { fmt.Fprintf(w, "0,") } fmt.Fprintf(w, "}}\n") fmt.Fprintf(w, " if a != want {\n") fmt.Fprintf(w, " t.Errorf(\"zero%du2 got=%%v, want %%v\\n\", a, want)\n", s) fmt.Fprintf(w, " }\n") fmt.Fprintf(w, " b := Z%du2{15, [%d]byte{", s, s) for i := 0; i < s; i++ { fmt.Fprintf(w, "255,") } fmt.Fprintf(w, "}}\n") fmt.Fprintf(w, " zero%du2_ssa(&b)\n", s) fmt.Fprintf(w, " wantb := Z%du2{15, [%d]byte{", s, s) for i := 0; i < s; i++ { fmt.Fprintf(w, "0,") } fmt.Fprintf(w, "}}\n") fmt.Fprintf(w, " if b != wantb {\n") fmt.Fprintf(w, " t.Errorf(\"zero%du2 got=%%v, want %%v\\n\", b, wantb)\n", s) fmt.Fprintf(w, " }\n") fmt.Fprintf(w, "}\n") } // boilerplate at end fmt.Fprintf(w, "func TestZero(t *testing.T) {\n") for _, s := range sizes { fmt.Fprintf(w, " testZero%d(t)\n", s) } for _, s := range usizes { fmt.Fprintf(w, " testZero%du(t)\n", s) } fmt.Fprintf(w, "}\n") // gofmt result b := w.Bytes() src, err := format.Source(b) if err != nil { fmt.Printf("%s\n", b) panic(err) } // write to file err = os.WriteFile("../zero_test.go", src, 0666) if err != nil { log.Fatalf("can't write output: %v\n", err) } } PK ! ��! �! testdata/gen/constFoldGen.gonu �[��� // 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. // This program generates a test to verify that the standard arithmetic // operators properly handle constant folding. The test file should be // generated with a known working version of go. // launch with `go run constFoldGen.go` a file called constFold_test.go // will be written into the grandparent directory containing the tests. package main import ( "bytes" "fmt" "go/format" "log" "os" ) type op struct { name, symbol string } type szD struct { name string sn string u []uint64 i []int64 } var szs []szD = []szD{ szD{name: "uint64", sn: "64", u: []uint64{0, 1, 4294967296, 0xffffFFFFffffFFFF}}, szD{name: "int64", sn: "64", i: []int64{-0x8000000000000000, -0x7FFFFFFFFFFFFFFF, -4294967296, -1, 0, 1, 4294967296, 0x7FFFFFFFFFFFFFFE, 0x7FFFFFFFFFFFFFFF}}, szD{name: "uint32", sn: "32", u: []uint64{0, 1, 4294967295}}, szD{name: "int32", sn: "32", i: []int64{-0x80000000, -0x7FFFFFFF, -1, 0, 1, 0x7FFFFFFF}}, szD{name: "uint16", sn: "16", u: []uint64{0, 1, 65535}}, szD{name: "int16", sn: "16", i: []int64{-32768, -32767, -1, 0, 1, 32766, 32767}}, szD{name: "uint8", sn: "8", u: []uint64{0, 1, 255}}, szD{name: "int8", sn: "8", i: []int64{-128, -127, -1, 0, 1, 126, 127}}, } var ops = []op{ op{"add", "+"}, op{"sub", "-"}, op{"div", "/"}, op{"mul", "*"}, op{"lsh", "<<"}, op{"rsh", ">>"}, op{"mod", "%"}, } // compute the result of i op j, cast as type t. func ansU(i, j uint64, t, op string) string { var ans uint64 switch op { case "+": ans = i + j case "-": ans = i - j case "*": ans = i * j case "/": if j != 0 { ans = i / j } case "%": if j != 0 { ans = i % j } case "<<": ans = i << j case ">>": ans = i >> j } switch t { case "uint32": ans = uint64(uint32(ans)) case "uint16": ans = uint64(uint16(ans)) case "uint8": ans = uint64(uint8(ans)) } return fmt.Sprintf("%d", ans) } // compute the result of i op j, cast as type t. func ansS(i, j int64, t, op string) string { var ans int64 switch op { case "+": ans = i + j case "-": ans = i - j case "*": ans = i * j case "/": if j != 0 { ans = i / j } case "%": if j != 0 { ans = i % j } case "<<": ans = i << uint64(j) case ">>": ans = i >> uint64(j) } switch t { case "int32": ans = int64(int32(ans)) case "int16": ans = int64(int16(ans)) case "int8": ans = int64(int8(ans)) } return fmt.Sprintf("%d", ans) } func main() { w := new(bytes.Buffer) fmt.Fprintf(w, "// run\n") fmt.Fprintf(w, "// Code generated by gen/constFoldGen.go. DO NOT EDIT.\n\n") fmt.Fprintf(w, "package gc\n") fmt.Fprintf(w, "import \"testing\"\n") for _, s := range szs { for _, o := range ops { if o.symbol == "<<" || o.symbol == ">>" { // shifts handled separately below, as they can have // different types on the LHS and RHS. continue } fmt.Fprintf(w, "func TestConstFold%s%s(t *testing.T) {\n", s.name, o.name) fmt.Fprintf(w, "\tvar x, y, r %s\n", s.name) // unsigned test cases for _, c := range s.u { fmt.Fprintf(w, "\tx = %d\n", c) for _, d := range s.u { if d == 0 && (o.symbol == "/" || o.symbol == "%") { continue } fmt.Fprintf(w, "\ty = %d\n", d) fmt.Fprintf(w, "\tr = x %s y\n", o.symbol) want := ansU(c, d, s.name, o.symbol) fmt.Fprintf(w, "\tif r != %s {\n", want) fmt.Fprintf(w, "\t\tt.Errorf(\"%d %%s %d = %%d, want %s\", %q, r)\n", c, d, want, o.symbol) fmt.Fprintf(w, "\t}\n") } } // signed test cases for _, c := range s.i { fmt.Fprintf(w, "\tx = %d\n", c) for _, d := range s.i { if d == 0 && (o.symbol == "/" || o.symbol == "%") { continue } fmt.Fprintf(w, "\ty = %d\n", d) fmt.Fprintf(w, "\tr = x %s y\n", o.symbol) want := ansS(c, d, s.name, o.symbol) fmt.Fprintf(w, "\tif r != %s {\n", want) fmt.Fprintf(w, "\t\tt.Errorf(\"%d %%s %d = %%d, want %s\", %q, r)\n", c, d, want, o.symbol) fmt.Fprintf(w, "\t}\n") } } fmt.Fprintf(w, "}\n") } } // Special signed/unsigned cases for shifts for _, ls := range szs { for _, rs := range szs { if rs.name[0] != 'u' { continue } for _, o := range ops { if o.symbol != "<<" && o.symbol != ">>" { continue } fmt.Fprintf(w, "func TestConstFold%s%s%s(t *testing.T) {\n", ls.name, rs.name, o.name) fmt.Fprintf(w, "\tvar x, r %s\n", ls.name) fmt.Fprintf(w, "\tvar y %s\n", rs.name) // unsigned LHS for _, c := range ls.u { fmt.Fprintf(w, "\tx = %d\n", c) for _, d := range rs.u { fmt.Fprintf(w, "\ty = %d\n", d) fmt.Fprintf(w, "\tr = x %s y\n", o.symbol) want := ansU(c, d, ls.name, o.symbol) fmt.Fprintf(w, "\tif r != %s {\n", want) fmt.Fprintf(w, "\t\tt.Errorf(\"%d %%s %d = %%d, want %s\", %q, r)\n", c, d, want, o.symbol) fmt.Fprintf(w, "\t}\n") } } // signed LHS for _, c := range ls.i { fmt.Fprintf(w, "\tx = %d\n", c) for _, d := range rs.u { fmt.Fprintf(w, "\ty = %d\n", d) fmt.Fprintf(w, "\tr = x %s y\n", o.symbol) want := ansS(c, int64(d), ls.name, o.symbol) fmt.Fprintf(w, "\tif r != %s {\n", want) fmt.Fprintf(w, "\t\tt.Errorf(\"%d %%s %d = %%d, want %s\", %q, r)\n", c, d, want, o.symbol) fmt.Fprintf(w, "\t}\n") } } fmt.Fprintf(w, "}\n") } } } // Constant folding for comparisons for _, s := range szs { fmt.Fprintf(w, "func TestConstFoldCompare%s(t *testing.T) {\n", s.name) for _, x := range s.i { for _, y := range s.i { fmt.Fprintf(w, "\t{\n") fmt.Fprintf(w, "\t\tvar x %s = %d\n", s.name, x) fmt.Fprintf(w, "\t\tvar y %s = %d\n", s.name, y) if x == y { fmt.Fprintf(w, "\t\tif !(x == y) { t.Errorf(\"!(%%d == %%d)\", x, y) }\n") } else { fmt.Fprintf(w, "\t\tif x == y { t.Errorf(\"%%d == %%d\", x, y) }\n") } if x != y { fmt.Fprintf(w, "\t\tif !(x != y) { t.Errorf(\"!(%%d != %%d)\", x, y) }\n") } else { fmt.Fprintf(w, "\t\tif x != y { t.Errorf(\"%%d != %%d\", x, y) }\n") } if x < y { fmt.Fprintf(w, "\t\tif !(x < y) { t.Errorf(\"!(%%d < %%d)\", x, y) }\n") } else { fmt.Fprintf(w, "\t\tif x < y { t.Errorf(\"%%d < %%d\", x, y) }\n") } if x > y { fmt.Fprintf(w, "\t\tif !(x > y) { t.Errorf(\"!(%%d > %%d)\", x, y) }\n") } else { fmt.Fprintf(w, "\t\tif x > y { t.Errorf(\"%%d > %%d\", x, y) }\n") } if x <= y { fmt.Fprintf(w, "\t\tif !(x <= y) { t.Errorf(\"!(%%d <= %%d)\", x, y) }\n") } else { fmt.Fprintf(w, "\t\tif x <= y { t.Errorf(\"%%d <= %%d\", x, y) }\n") } if x >= y { fmt.Fprintf(w, "\t\tif !(x >= y) { t.Errorf(\"!(%%d >= %%d)\", x, y) }\n") } else { fmt.Fprintf(w, "\t\tif x >= y { t.Errorf(\"%%d >= %%d\", x, y) }\n") } fmt.Fprintf(w, "\t}\n") } } for _, x := range s.u { for _, y := range s.u { fmt.Fprintf(w, "\t{\n") fmt.Fprintf(w, "\t\tvar x %s = %d\n", s.name, x) fmt.Fprintf(w, "\t\tvar y %s = %d\n", s.name, y) if x == y { fmt.Fprintf(w, "\t\tif !(x == y) { t.Errorf(\"!(%%d == %%d)\", x, y) }\n") } else { fmt.Fprintf(w, "\t\tif x == y { t.Errorf(\"%%d == %%d\", x, y) }\n") } if x != y { fmt.Fprintf(w, "\t\tif !(x != y) { t.Errorf(\"!(%%d != %%d)\", x, y) }\n") } else { fmt.Fprintf(w, "\t\tif x != y { t.Errorf(\"%%d != %%d\", x, y) }\n") } if x < y { fmt.Fprintf(w, "\t\tif !(x < y) { t.Errorf(\"!(%%d < %%d)\", x, y) }\n") } else { fmt.Fprintf(w, "\t\tif x < y { t.Errorf(\"%%d < %%d\", x, y) }\n") } if x > y { fmt.Fprintf(w, "\t\tif !(x > y) { t.Errorf(\"!(%%d > %%d)\", x, y) }\n") } else { fmt.Fprintf(w, "\t\tif x > y { t.Errorf(\"%%d > %%d\", x, y) }\n") } if x <= y { fmt.Fprintf(w, "\t\tif !(x <= y) { t.Errorf(\"!(%%d <= %%d)\", x, y) }\n") } else { fmt.Fprintf(w, "\t\tif x <= y { t.Errorf(\"%%d <= %%d\", x, y) }\n") } if x >= y { fmt.Fprintf(w, "\t\tif !(x >= y) { t.Errorf(\"!(%%d >= %%d)\", x, y) }\n") } else { fmt.Fprintf(w, "\t\tif x >= y { t.Errorf(\"%%d >= %%d\", x, y) }\n") } fmt.Fprintf(w, "\t}\n") } } fmt.Fprintf(w, "}\n") } // gofmt result b := w.Bytes() src, err := format.Source(b) if err != nil { fmt.Printf("%s\n", b) panic(err) } // write to file err = os.WriteFile("../../constFold_test.go", src, 0666) if err != nil { log.Fatalf("can't write output: %v\n", err) } } PK ! ��q� � testdata/gen/cmpConstGen.gonu �[��� // Copyright 2017 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. // This program generates a test to verify that the standard comparison // operators properly handle one const operand. The test file should be // generated with a known working version of go. // launch with `go run cmpConstGen.go` a file called cmpConst.go // will be written into the parent directory containing the tests package main import ( "bytes" "fmt" "go/format" "log" "math/big" "sort" ) const ( maxU64 = (1 << 64) - 1 maxU32 = (1 << 32) - 1 maxU16 = (1 << 16) - 1 maxU8 = (1 << 8) - 1 maxI64 = (1 << 63) - 1 maxI32 = (1 << 31) - 1 maxI16 = (1 << 15) - 1 maxI8 = (1 << 7) - 1 minI64 = -(1 << 63) minI32 = -(1 << 31) minI16 = -(1 << 15) minI8 = -(1 << 7) ) func cmp(left *big.Int, op string, right *big.Int) bool { switch left.Cmp(right) { case -1: // less than return op == "<" || op == "<=" || op == "!=" case 0: // equal return op == "==" || op == "<=" || op == ">=" case 1: // greater than return op == ">" || op == ">=" || op == "!=" } panic("unexpected comparison value") } func inRange(typ string, val *big.Int) bool { min, max := &big.Int{}, &big.Int{} switch typ { case "uint64": max = max.SetUint64(maxU64) case "uint32": max = max.SetUint64(maxU32) case "uint16": max = max.SetUint64(maxU16) case "uint8": max = max.SetUint64(maxU8) case "int64": min = min.SetInt64(minI64) max = max.SetInt64(maxI64) case "int32": min = min.SetInt64(minI32) max = max.SetInt64(maxI32) case "int16": min = min.SetInt64(minI16) max = max.SetInt64(maxI16) case "int8": min = min.SetInt64(minI8) max = max.SetInt64(maxI8) default: panic("unexpected type") } return cmp(min, "<=", val) && cmp(val, "<=", max) } func getValues(typ string) []*big.Int { Uint := func(v uint64) *big.Int { return big.NewInt(0).SetUint64(v) } Int := func(v int64) *big.Int { return big.NewInt(0).SetInt64(v) } values := []*big.Int{ // limits Uint(maxU64), Uint(maxU64 - 1), Uint(maxI64 + 1), Uint(maxI64), Uint(maxI64 - 1), Uint(maxU32 + 1), Uint(maxU32), Uint(maxU32 - 1), Uint(maxI32 + 1), Uint(maxI32), Uint(maxI32 - 1), Uint(maxU16 + 1), Uint(maxU16), Uint(maxU16 - 1), Uint(maxI16 + 1), Uint(maxI16), Uint(maxI16 - 1), Uint(maxU8 + 1), Uint(maxU8), Uint(maxU8 - 1), Uint(maxI8 + 1), Uint(maxI8), Uint(maxI8 - 1), Uint(0), Int(minI8 + 1), Int(minI8), Int(minI8 - 1), Int(minI16 + 1), Int(minI16), Int(minI16 - 1), Int(minI32 + 1), Int(minI32), Int(minI32 - 1), Int(minI64 + 1), Int(minI64), // other possibly interesting values Uint(1), Int(-1), Uint(0xff << 56), Uint(0xff << 32), Uint(0xff << 24), } sort.Slice(values, func(i, j int) bool { return values[i].Cmp(values[j]) == -1 }) var ret []*big.Int for _, val := range values { if !inRange(typ, val) { continue } ret = append(ret, val) } return ret } func sigString(v *big.Int) string { var t big.Int t.Abs(v) if v.Sign() == -1 { return "neg" + t.String() } return t.String() } func main() { types := []string{ "uint64", "uint32", "uint16", "uint8", "int64", "int32", "int16", "int8", } w := new(bytes.Buffer) fmt.Fprintf(w, "// Code generated by gen/cmpConstGen.go. DO NOT EDIT.\n\n") fmt.Fprintf(w, "package main;\n") fmt.Fprintf(w, "import (\"testing\"; \"reflect\"; \"runtime\";)\n") fmt.Fprintf(w, "// results show the expected result for the elements left of, equal to and right of the index.\n") fmt.Fprintf(w, "type result struct{l, e, r bool}\n") fmt.Fprintf(w, "var (\n") fmt.Fprintf(w, " eq = result{l: false, e: true, r: false}\n") fmt.Fprintf(w, " ne = result{l: true, e: false, r: true}\n") fmt.Fprintf(w, " lt = result{l: true, e: false, r: false}\n") fmt.Fprintf(w, " le = result{l: true, e: true, r: false}\n") fmt.Fprintf(w, " gt = result{l: false, e: false, r: true}\n") fmt.Fprintf(w, " ge = result{l: false, e: true, r: true}\n") fmt.Fprintf(w, ")\n") operators := []struct{ op, name string }{ {"<", "lt"}, {"<=", "le"}, {">", "gt"}, {">=", "ge"}, {"==", "eq"}, {"!=", "ne"}, } for _, typ := range types { // generate a slice containing valid values for this type fmt.Fprintf(w, "\n// %v tests\n", typ) values := getValues(typ) fmt.Fprintf(w, "var %v_vals = []%v{\n", typ, typ) for _, val := range values { fmt.Fprintf(w, "%v,\n", val.String()) } fmt.Fprintf(w, "}\n") // generate test functions for _, r := range values { // TODO: could also test constant on lhs. sig := sigString(r) for _, op := range operators { // no need for go:noinline because the function is called indirectly fmt.Fprintf(w, "func %v_%v_%v(x %v) bool { return x %v %v; }\n", op.name, sig, typ, typ, op.op, r.String()) } } // generate a table of test cases fmt.Fprintf(w, "var %v_tests = []struct{\n", typ) fmt.Fprintf(w, " idx int // index of the constant used\n") fmt.Fprintf(w, " exp result // expected results\n") fmt.Fprintf(w, " fn func(%v) bool\n", typ) fmt.Fprintf(w, "}{\n") for i, r := range values { sig := sigString(r) for _, op := range operators { fmt.Fprintf(w, "{idx: %v,", i) fmt.Fprintf(w, "exp: %v,", op.name) fmt.Fprintf(w, "fn: %v_%v_%v},\n", op.name, sig, typ) } } fmt.Fprintf(w, "}\n") } // emit the main function, looping over all test cases fmt.Fprintf(w, "// TestComparisonsConst tests results for comparison operations against constants.\n") fmt.Fprintf(w, "func TestComparisonsConst(t *testing.T) {\n") for _, typ := range types { fmt.Fprintf(w, "for i, test := range %v_tests {\n", typ) fmt.Fprintf(w, " for j, x := range %v_vals {\n", typ) fmt.Fprintf(w, " want := test.exp.l\n") fmt.Fprintf(w, " if j == test.idx {\nwant = test.exp.e\n}") fmt.Fprintf(w, " else if j > test.idx {\nwant = test.exp.r\n}\n") fmt.Fprintf(w, " if test.fn(x) != want {\n") fmt.Fprintf(w, " fn := runtime.FuncForPC(reflect.ValueOf(test.fn).Pointer()).Name()\n") fmt.Fprintf(w, " t.Errorf(\"test failed: %%v(%%v) != %%v [type=%v i=%%v j=%%v idx=%%v]\", fn, x, want, i, j, test.idx)\n", typ) fmt.Fprintf(w, " }\n") fmt.Fprintf(w, " }\n") fmt.Fprintf(w, "}\n") } fmt.Fprintf(w, "}\n") // gofmt result b := w.Bytes() src, err := format.Source(b) if err != nil { fmt.Printf("%s\n", b) panic(err) } // write to file err = os.WriteFile("../cmpConst_test.go", src, 0666) if err != nil { log.Fatalf("can't write output: %v\n", err) } } PK ! ��}K K testdata/gen/copyGen.gonu �[��� // Copyright 2015 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 main import ( "bytes" "fmt" "go/format" "log" "os" ) // This program generates tests to verify that copying operations // copy the data they are supposed to and clobber no adjacent values. // run as `go run copyGen.go`. A file called copy.go // will be written into the parent directory containing the tests. var sizes = [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 16, 17, 23, 24, 25, 31, 32, 33, 63, 64, 65, 1023, 1024, 1025, 1024 + 7, 1024 + 8, 1024 + 9, 1024 + 15, 1024 + 16, 1024 + 17} var usizes = [...]int{2, 3, 4, 5, 6, 7} func main() { w := new(bytes.Buffer) fmt.Fprintf(w, "// Code generated by gen/copyGen.go. DO NOT EDIT.\n\n") fmt.Fprintf(w, "package main\n") fmt.Fprintf(w, "import \"testing\"\n") for _, s := range sizes { // type for test fmt.Fprintf(w, "type T%d struct {\n", s) fmt.Fprintf(w, " pre [8]byte\n") fmt.Fprintf(w, " mid [%d]byte\n", s) fmt.Fprintf(w, " post [8]byte\n") fmt.Fprintf(w, "}\n") // function being tested fmt.Fprintf(w, "//go:noinline\n") fmt.Fprintf(w, "func t%dcopy_ssa(y, x *[%d]byte) {\n", s, s) fmt.Fprintf(w, " *y = *x\n") fmt.Fprintf(w, "}\n") // testing harness fmt.Fprintf(w, "func testCopy%d(t *testing.T) {\n", s) fmt.Fprintf(w, " a := T%d{[8]byte{201, 202, 203, 204, 205, 206, 207, 208},[%d]byte{", s, s) for i := 0; i < s; i++ { fmt.Fprintf(w, "%d,", i%100) } fmt.Fprintf(w, "},[8]byte{211, 212, 213, 214, 215, 216, 217, 218}}\n") fmt.Fprintf(w, " x := [%d]byte{", s) for i := 0; i < s; i++ { fmt.Fprintf(w, "%d,", 100+i%100) } fmt.Fprintf(w, "}\n") fmt.Fprintf(w, " t%dcopy_ssa(&a.mid, &x)\n", s) fmt.Fprintf(w, " want := T%d{[8]byte{201, 202, 203, 204, 205, 206, 207, 208},[%d]byte{", s, s) for i := 0; i < s; i++ { fmt.Fprintf(w, "%d,", 100+i%100) } fmt.Fprintf(w, "},[8]byte{211, 212, 213, 214, 215, 216, 217, 218}}\n") fmt.Fprintf(w, " if a != want {\n") fmt.Fprintf(w, " t.Errorf(\"t%dcopy got=%%v, want %%v\\n\", a, want)\n", s) fmt.Fprintf(w, " }\n") fmt.Fprintf(w, "}\n") } for _, s := range usizes { // function being tested fmt.Fprintf(w, "//go:noinline\n") fmt.Fprintf(w, "func tu%dcopy_ssa(docopy bool, data [%d]byte, x *[%d]byte) {\n", s, s, s) fmt.Fprintf(w, " if docopy {\n") fmt.Fprintf(w, " *x = data\n") fmt.Fprintf(w, " }\n") fmt.Fprintf(w, "}\n") // testing harness fmt.Fprintf(w, "func testUnalignedCopy%d(t *testing.T) {\n", s) fmt.Fprintf(w, " var a [%d]byte\n", s) fmt.Fprintf(w, " t%d := [%d]byte{", s, s) for i := 0; i < s; i++ { fmt.Fprintf(w, " %d,", s+i) } fmt.Fprintf(w, "}\n") fmt.Fprintf(w, " tu%dcopy_ssa(true, t%d, &a)\n", s, s) fmt.Fprintf(w, " want%d := [%d]byte{", s, s) for i := 0; i < s; i++ { fmt.Fprintf(w, " %d,", s+i) } fmt.Fprintf(w, "}\n") fmt.Fprintf(w, " if a != want%d {\n", s) fmt.Fprintf(w, " t.Errorf(\"tu%dcopy got=%%v, want %%v\\n\", a, want%d)\n", s, s) fmt.Fprintf(w, " }\n") fmt.Fprintf(w, "}\n") } // boilerplate at end fmt.Fprintf(w, "func TestCopy(t *testing.T) {\n") for _, s := range sizes { fmt.Fprintf(w, " testCopy%d(t)\n", s) } for _, s := range usizes { fmt.Fprintf(w, " testUnalignedCopy%d(t)\n", s) } fmt.Fprintf(w, "}\n") // gofmt result b := w.Bytes() src, err := format.Source(b) if err != nil { fmt.Printf("%s\n", b) panic(err) } // write to file err = os.WriteFile("../copy_test.go", src, 0666) if err != nil { log.Fatalf("can't write output: %v\n", err) } } PK ! ��"�0 0 testdata/gen/arithBoundaryGen.gonu �[��� // Copyright 2015 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. // This program generates a test to verify that the standard arithmetic // operators properly handle some special cases. The test file should be // generated with a known working version of go. // launch with `go run arithBoundaryGen.go` a file called arithBoundary.go // will be written into the parent directory containing the tests package main import ( "bytes" "fmt" "go/format" "log" "text/template" ) // used for interpolation in a text template type tmplData struct { Name, Stype, Symbol string } // used to work around an issue with the mod symbol being // interpreted as part of a format string func (s tmplData) SymFirst() string { return string(s.Symbol[0]) } // ucast casts an unsigned int to the size in s func ucast(i uint64, s sizedTestData) uint64 { switch s.name { case "uint32": return uint64(uint32(i)) case "uint16": return uint64(uint16(i)) case "uint8": return uint64(uint8(i)) } return i } // icast casts a signed int to the size in s func icast(i int64, s sizedTestData) int64 { switch s.name { case "int32": return int64(int32(i)) case "int16": return int64(int16(i)) case "int8": return int64(int8(i)) } return i } type sizedTestData struct { name string sn string u []uint64 i []int64 } // values to generate tests. these should include the smallest and largest values, along // with any other values that might cause issues. we generate n^2 tests for each size to // cover all cases. var szs = []sizedTestData{ sizedTestData{name: "uint64", sn: "64", u: []uint64{0, 1, 4294967296, 0xffffFFFFffffFFFF}}, sizedTestData{name: "int64", sn: "64", i: []int64{-0x8000000000000000, -0x7FFFFFFFFFFFFFFF, -4294967296, -1, 0, 1, 4294967296, 0x7FFFFFFFFFFFFFFE, 0x7FFFFFFFFFFFFFFF}}, sizedTestData{name: "uint32", sn: "32", u: []uint64{0, 1, 4294967295}}, sizedTestData{name: "int32", sn: "32", i: []int64{-0x80000000, -0x7FFFFFFF, -1, 0, 1, 0x7FFFFFFF}}, sizedTestData{name: "uint16", sn: "16", u: []uint64{0, 1, 65535}}, sizedTestData{name: "int16", sn: "16", i: []int64{-32768, -32767, -1, 0, 1, 32766, 32767}}, sizedTestData{name: "uint8", sn: "8", u: []uint64{0, 1, 255}}, sizedTestData{name: "int8", sn: "8", i: []int64{-128, -127, -1, 0, 1, 126, 127}}, } type op struct { name, symbol string } // ops that we will be generating tests for var ops = []op{op{"add", "+"}, op{"sub", "-"}, op{"div", "/"}, op{"mod", "%%"}, op{"mul", "*"}} func main() { w := new(bytes.Buffer) fmt.Fprintf(w, "// Code generated by gen/arithBoundaryGen.go. DO NOT EDIT.\n\n") fmt.Fprintf(w, "package main;\n") fmt.Fprintf(w, "import \"testing\"\n") for _, sz := range []int{64, 32, 16, 8} { fmt.Fprintf(w, "type utd%d struct {\n", sz) fmt.Fprintf(w, " a,b uint%d\n", sz) fmt.Fprintf(w, " add,sub,mul,div,mod uint%d\n", sz) fmt.Fprintf(w, "}\n") fmt.Fprintf(w, "type itd%d struct {\n", sz) fmt.Fprintf(w, " a,b int%d\n", sz) fmt.Fprintf(w, " add,sub,mul,div,mod int%d\n", sz) fmt.Fprintf(w, "}\n") } // the function being tested testFunc, err := template.New("testFunc").Parse( `//go:noinline func {{.Name}}_{{.Stype}}_ssa(a, b {{.Stype}}) {{.Stype}} { return a {{.SymFirst}} b } `) if err != nil { panic(err) } // generate our functions to be tested for _, s := range szs { for _, o := range ops { fd := tmplData{o.name, s.name, o.symbol} err = testFunc.Execute(w, fd) if err != nil { panic(err) } } } // generate the test data for _, s := range szs { if len(s.u) > 0 { fmt.Fprintf(w, "var %s_data []utd%s = []utd%s{", s.name, s.sn, s.sn) for _, i := range s.u { for _, j := range s.u { fmt.Fprintf(w, "utd%s{a: %d, b: %d, add: %d, sub: %d, mul: %d", s.sn, i, j, ucast(i+j, s), ucast(i-j, s), ucast(i*j, s)) if j != 0 { fmt.Fprintf(w, ", div: %d, mod: %d", ucast(i/j, s), ucast(i%j, s)) } fmt.Fprint(w, "},\n") } } fmt.Fprintf(w, "}\n") } else { // TODO: clean up this duplication fmt.Fprintf(w, "var %s_data []itd%s = []itd%s{", s.name, s.sn, s.sn) for _, i := range s.i { for _, j := range s.i { fmt.Fprintf(w, "itd%s{a: %d, b: %d, add: %d, sub: %d, mul: %d", s.sn, i, j, icast(i+j, s), icast(i-j, s), icast(i*j, s)) if j != 0 { fmt.Fprintf(w, ", div: %d, mod: %d", icast(i/j, s), icast(i%j, s)) } fmt.Fprint(w, "},\n") } } fmt.Fprintf(w, "}\n") } } fmt.Fprintf(w, "//TestArithmeticBoundary tests boundary results for arithmetic operations.\n") fmt.Fprintf(w, "func TestArithmeticBoundary(t *testing.T) {\n\n") verify, err := template.New("tst").Parse( `if got := {{.Name}}_{{.Stype}}_ssa(v.a, v.b); got != v.{{.Name}} { t.Errorf("{{.Name}}_{{.Stype}} %d{{.Symbol}}%d = %d, wanted %d\n",v.a,v.b,got,v.{{.Name}}) } `) for _, s := range szs { fmt.Fprintf(w, "for _, v := range %s_data {\n", s.name) for _, o := range ops { // avoid generating tests that divide by zero if o.name == "div" || o.name == "mod" { fmt.Fprint(w, "if v.b != 0 {") } err = verify.Execute(w, tmplData{o.name, s.name, o.symbol}) if o.name == "div" || o.name == "mod" { fmt.Fprint(w, "\n}\n") } if err != nil { panic(err) } } fmt.Fprint(w, " }\n") } fmt.Fprintf(w, "}\n") // gofmt result b := w.Bytes() src, err := format.Source(b) if err != nil { fmt.Printf("%s\n", b) panic(err) } // write to file err = os.WriteFile("../arithBoundary_test.go", src, 0666) if err != nil { log.Fatalf("can't write output: %v\n", err) } } PK ! zܼ�M M testdata/ctl_test.gonu �[��� // Copyright 2015 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. // Test control flow package main import "testing" // nor_ssa calculates NOR(a, b). // It is implemented in a way that generates // phi control values. func nor_ssa(a, b bool) bool { var c bool if a { c = true } if b { c = true } if c { return false } return true } func testPhiControl(t *testing.T) { tests := [...][3]bool{ // a, b, want {false, false, true}, {true, false, false}, {false, true, false}, {true, true, false}, } for _, test := range tests { a, b := test[0], test[1] got := nor_ssa(a, b) want := test[2] if want != got { t.Errorf("nor(%t, %t)=%t got %t", a, b, want, got) } } } func emptyRange_ssa(b []byte) bool { for _, x := range b { _ = x } return true } func testEmptyRange(t *testing.T) { if !emptyRange_ssa([]byte{}) { t.Errorf("emptyRange_ssa([]byte{})=false, want true") } } func switch_ssa(a int) int { ret := 0 switch a { case 5: ret += 5 case 4: ret += 4 case 3: ret += 3 case 2: ret += 2 case 1: ret += 1 } return ret } func fallthrough_ssa(a int) int { ret := 0 switch a { case 5: ret++ fallthrough case 4: ret++ fallthrough case 3: ret++ fallthrough case 2: ret++ fallthrough case 1: ret++ } return ret } func testFallthrough(t *testing.T) { for i := 0; i < 6; i++ { if got := fallthrough_ssa(i); got != i { t.Errorf("fallthrough_ssa(i) = %d, wanted %d", got, i) } } } func testSwitch(t *testing.T) { for i := 0; i < 6; i++ { if got := switch_ssa(i); got != i { t.Errorf("switch_ssa(i) = %d, wanted %d", got, i) } } } type junk struct { step int } // flagOverwrite_ssa is intended to reproduce an issue seen where a XOR // was scheduled between a compare and branch, clearing flags. // //go:noinline func flagOverwrite_ssa(s *junk, c int) int { if '0' <= c && c <= '9' { s.step = 0 return 1 } if c == 'e' || c == 'E' { s.step = 0 return 2 } s.step = 0 return 3 } func testFlagOverwrite(t *testing.T) { j := junk{} if got := flagOverwrite_ssa(&j, ' '); got != 3 { t.Errorf("flagOverwrite_ssa = %d, wanted 3", got) } } func TestCtl(t *testing.T) { testPhiControl(t) testEmptyRange(t) testSwitch(t) testFallthrough(t) testFlagOverwrite(t) } PK ! b>�� � testdata/append_test.gonu �[��� // Copyright 2015 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. // append_ssa.go tests append operations. package main import "testing" //go:noinline func appendOne_ssa(a []int, x int) []int { return append(a, x) } //go:noinline func appendThree_ssa(a []int, x, y, z int) []int { return append(a, x, y, z) } func eqBytes(a, b []int) bool { if len(a) != len(b) { return false } for i := range a { if a[i] != b[i] { return false } } return true } func expect(t *testing.T, got, want []int) { if eqBytes(got, want) { return } t.Errorf("expected %v, got %v\n", want, got) } func testAppend(t *testing.T) { var store [7]int a := store[:0] a = appendOne_ssa(a, 1) expect(t, a, []int{1}) a = appendThree_ssa(a, 2, 3, 4) expect(t, a, []int{1, 2, 3, 4}) a = appendThree_ssa(a, 5, 6, 7) expect(t, a, []int{1, 2, 3, 4, 5, 6, 7}) if &a[0] != &store[0] { t.Errorf("unnecessary grow") } a = appendOne_ssa(a, 8) expect(t, a, []int{1, 2, 3, 4, 5, 6, 7, 8}) if &a[0] == &store[0] { t.Errorf("didn't grow") } } func TestAppend(t *testing.T) { testAppend(t) } PK ! �|"SK K &