Skip to content
Snippets Groups Projects
cheat.go 1.78 KiB
Newer Older
  • Learn to ignore specific revisions
  • // Copyright 2025 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
    
    // This program can be compiled with -S to produce a “cheat sheet”
    // for filling out a new Arch: the compiler will show you how to implement
    // the various operations.
    //
    // Usage (replace TARGET with your target architecture):
    //
    //	GOOS=linux GOARCH=TARGET go build -gcflags='-p=cheat -S' cheat.go
    
    package p
    
    import "math/bits"
    
    func mov(x, y uint) uint             { return y }
    func zero() uint                     { return 0 }
    func add(x, y uint) uint             { return x + y }
    func adds(x, y, c uint) (uint, uint) { return bits.Add(x, y, 0) }
    func adcs(x, y, c uint) (uint, uint) { return bits.Add(x, y, c) }
    func sub(x, y uint) uint             { return x + y }
    func subs(x, y uint) (uint, uint)    { return bits.Sub(x, y, 0) }
    func sbcs(x, y, c uint) (uint, uint) { return bits.Sub(x, y, c) }
    func mul(x, y uint) uint             { return x * y }
    func mulWide(x, y uint) (uint, uint) { return bits.Mul(x, y) }
    func lsh(x, s uint) uint             { return x << s }
    func rsh(x, s uint) uint             { return x >> s }
    func and(x, y uint) uint             { return x & y }
    func or(x, y uint) uint              { return x | y }
    func xor(x, y uint) uint             { return x ^ y }
    func neg(x uint) uint                { return -x }
    func loop(x int) int {
    	s := 0
    	for i := 1; i < x; i++ {
    		s += i
    
    		if s == 98 { // useful for jmpEqual
    
    			return 99
    		}
    		if s == 99 {
    			return 100
    		}
    
    		if s == 0 { // useful for jmpZero
    
    		if s != 0 { // useful for jmpNonZero
    			s *= 3
    		}
    		s += 2 // keep last condition from being inverted
    
    	}
    	return s
    }
    func mem(x *[10]struct{ a, b uint }, i int) uint { return x[i].b }